JPEG的无损裁剪(剪切和粘贴)

tdp*_*110 7 jpeg image-processing

我正在寻找无损jpeg操作的示例/博客文章/等(裁剪n drop =剪切和粘贴).我知道有一个程序jpegtran(http://jpegclub.org/jpegtran)可以执行无损裁剪(在某些情况下),但似乎缺乏良好的文档.是的,我试过谷歌.

jpegtran 还有一个实验分支,允许在某些情况下无损丢弃(=粘贴),但这方面的记录似乎更糟.

那jpegtran的drop开关是实验性的呢?它有已知问题吗?人们用它吗?

drop 看起来像是一个非常酷且有用的功能,我觉得很奇怪它已经实验了10多年......

是的,可以使用PNG等无损格式进行此类操作,但我对JPEG特别感兴趣.

谢谢!

Uns*_*ned 8

我花了太多时间试图解决这个问题,所以这里希望这有助于其他人.在搜索这个所谓的"crop'n drop"功能的文档时,谷歌的这个问题相当高.

概述:

jpegtran -drop 允许您将块从一个JPEG"拖放"到另一个JPEG上.

它只替换现有的块,它不会扩展输入,所以你不能只连接两个JPEG -drop.

但是,如果您提供的-crop参数大于输入图像,JPEGTran将写出空白(灰色)块以扩展到所需的大小.然后,您可以使用-drop所需的图像替换这些新的空白块.

看看我糟糕的ASCII艺术例子:

  1. 你有两个图像,A.jpg并且B.jpg,两者都有的尺寸256x256.我们希望将这些并排连接起来以生成512x256图像.

    +---------+  +---------+
    |         |  |         |
    |  A.jpg  |  |  B.jpg  |
    |         |  |         |
    +---------+  +---------+
    
    Run Code Online (Sandbox Code Playgroud)
  2. "Uncrop" A.jpg到所需的大小.的-crop参数是标准X11几何表示法:为WIDTHxHEIGHT + X + Y正X/Y值从顶部/左和负从底部/值测量右,分别.

    jpegtran -crop 512x256+0+0 -outfile O.jpg A.jpg
    
    +---------+---------+
    |         \         |
    |  O.jpg  \ (blank) |
    |         \         |
    +---------+---------+
    
    Run Code Online (Sandbox Code Playgroud)
  3. 现在" B.jpg放入"新的空白部分O.jpg.-drop参数仅使用原点X/Y坐标.

    jpegtran -drop +256+0 B.jpg -outfile O.jpg O.jpg
    
    +---------+---------+    +---------+
    |         \         |    |         |
    |  O.jpg  \    o<========|  B.jpg  |
    |         \         |    |         |
    +---------+---------+    +---------+
    
    Run Code Online (Sandbox Code Playgroud)
  4. 完成!您现在有一个单独的文件,O.jpg与尺寸512x256,包含的内容串联A.jpgB.jpg

    +-------------------+
    |                   |
    |       O.jpg       |
    |                   |
    +-------------------+
    
    Run Code Online (Sandbox Code Playgroud)

笔记:

  • A.jpg并且B.jpg必须有相同的高度.如果B.jpg更高,它将被切断.如果A.jpg更高,图像的右侧将有一个空白的填充条.
  • A.jpg必须具有以完整块结束的宽度.(通常意味着可被8整除?)
  • B.jpg 可以具有任何宽度,并且不必是块大小的倍数.


Nic*_*nks 0

手册jpegtran页和两个 Windows 应用程序(JpegCropJpegJoin)都相当不错。如果您有想要完成的特定过程,请更新您的问题以进行解释。

我自己曾经-drop在公司主页上对 JPEG 进行无损分割:
http://bestelec.co.uk/images/front/features.jpg

  1. 首先,我将原始照片裁剪下来(在像素边界上)以包含所需的框架。此步骤可以使用非 JPEG 格式无损保存。[艺术方向]
  2. 接下来,我根据网页设计的要求将这些图像缩小到必要的宽度。再次,无损保存,因为这些是中间步骤。
  3. 然后我用各种质量选项运行它们cjpeg,直到找到我满意的最低质量设置。
  4. (可选)接下来,我裁剪了每个降低质量的单个图像的底部边缘,以与垂直轴上的倒数第二个 MCU 边界对齐。这使我能够将照片无间隙地排列在垂直条中。我的网页设计不需要一定的高度,所以我可以在这里自由选择一个。如果您的组件图像的范围未与 MCU 边界对齐(正如我的右边缘未对齐),请确保您使用的是 2012 年 10 月版本的 jpegtran/JpegJoin,否​​则只有第一张图像会显示为未裁剪的。
  5. 最后,我将这些图像合并成一个 jpeg,并运行结果jpegtran -optimise -progressive -copy none以使其尽可能小且渐进。

最终结果是我将 3 个 HTTP 请求减少为 1 个,从而允许更早地请求同一主机上的后续资源并缩短加载时间。对我来说,这比将图像转换为 WebP 并单独提供它们来说是一个更大的胜利,特别是考虑到我们的大多数企业访问者都使用 IE。