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

时间:2011-10-31 20:11:59

标签: image-processing jpeg

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

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

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:7)

我花了太多时间试图解决这个问题,所以我希望这有助于其他人。在这个所谓的" crop' n drop"上搜索文档时,Google上的这个问题相当高。特征

概述:

jpegtran -drop可让您“放弃”#34;从一个JPEG到另一个JPEG的块。

它只替换现有的块,它不会扩展输入,因此你不能只用-drop连接两个JPEG。

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

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

  1. 您有两个图片A.jpgB.jpg,两个图片的尺寸均为256x256。我们希望将这些并排连接起来以生成512x256图像。

    +---------+  +---------+
    |         |  |         |
    |  A.jpg  |  |  B.jpg  |
    |         |  |         |
    +---------+  +---------+
    
  2. " Uncrop" A.jpg达到所需的大小。 -crop参数是标准的X11几何表示法:WIDTHxHEIGHT + X + Y正X / Y值分别从上/下测量,负值从下/右测量。

    jpegtran -crop 512x256+0+0 -outfile O.jpg A.jpg
    
    +---------+---------+
    |         \         |
    |  O.jpg  \ (blank) |
    |         \         |
    +---------+---------+
    
  3. 现在&#34; drop&#34; B.jpg O.jpg -drop参数中的新空白部分jpegtran -drop +256+0 B.jpg -outfile O.jpg O.jpg +---------+---------+ +---------+ | \ | | | | O.jpg \ o<========| B.jpg | | \ | | | +---------+---------+ +---------+ 仅使用原点X / Y坐标。

    O.jpg
  4. 完成!您现在拥有一个文件512x256,其维度为A.jpg,其中包含B.jpg+-------------------+ | | | O.jpg | | | +-------------------+ 的连接内容

    A.jpg
  5. 注意:

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

答案 1 :(得分:-1)

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运行结果,使其尽可能小,并且渐进。
  6. 最终结果是我将三个HTTP请求减少到一个,允许更早地请求同一主机上的后续资源并改善加载时间。这对我来说是一个更大的胜利,而不是将图像转换为WebP并单独提供它们,特别是考虑到我们的大多数公司访问者都使用IE浏览器。