【发布时间】:2014-06-17 18:01:48
【问题描述】:
我需要做以下事情:我有一个标准的 JPEG 图像作为输入。我需要做的是将其转换为 PNG 32 位(alpha 透明度)并设置一些像素的透明边框。
我尝试使用 ImageMagic 这些命令:
convert xxx.jpg xxx.png
convert xxx.png -channel RGBA -separate -resize 500x500 -combine xxx.png
convert xxx.png -alpha set -channel RGBA -separate \
-background "RGBA(0,0,0,0)" -gravity center \
-extent 550x550 -composite xxx1.png
这就是我在 OpenGL 程序中使用此图像后的结果,它在输出上预乘它,因为需要 alpha 混合。
黑色边缘是原始 JPEG 图像部分结束的位置(可见边缘周围还有 10 像素透明边框),这意味着从 ImageMagic 生成的图像可能是预乘的,这不是我想要的。我需要就像 Photoshop 以未预乘状态导出 PNG 图像一样,它不会被重乘。这样我可以摆脱黑色边框伪影。
如果我使用像 GL_LINEAR 或 GL_LINEAR_MIPMAP_LINEAR 这样的线性插值,就会发生出血。许多资料中还指出,这种出血是相邻像素线性插值的结果。
奇怪。如果我在 Photoshop 中进行这样的设置,即,将 JPG 放入透明画布,然后使用透明通道将其保存到 PNG24,那么出血就消失了。此外,如果我从上述 ImageMagic 过程中删除生成的 PNG并用 Photoshop 重新保存它,然后它也得到修复。我不能使用 Photoshop,因为我需要像 ImageMagic 这样的命令行工具来创建这些图像。我也可以使用通过 C++ 代码自定义的东西,但我目前不知道如何摆脱那个黑边。
【问题讨论】:
-
也许尝试来自imagemagick.org/Usage/thumbnails/#pad的所有其他命令?
-
已经检查过了。不起作用。ImageMagic 导出 JPG 的方式与 Photoshop 不同。
-
你的意思是如果你从photoshop保存xxx.png并运行命令2和3,没有出血?
-
不,我的意思是,如果我使用 1,2,3 命令拍摄已经通过 ImageMagic 传递的图片并将其重新保存为 PNG,然后它就会得到修复。
-
您能否发布指向使用 Photoshop 生成的图像(一个很好的结果)和使用 ImageMagick 生成的图像(导致出血的图像)的链接。从描述中我不确定它应该是什么样子,但如果你发布图片,我会调查一下。
标签: opengl image-processing imagemagick png jpeg