Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 有没有高质量的编程解决方案可以将不透明背景的jpeg转换为透明背景的png?_Image Processing_Png_Transparency_Jpeg_Antialiasing - Fatal编程技术网

Image processing 有没有高质量的编程解决方案可以将不透明背景的jpeg转换为透明背景的png?

Image processing 有没有高质量的编程解决方案可以将不透明背景的jpeg转换为透明背景的png?,image-processing,png,transparency,jpeg,antialiasing,Image Processing,Png,Transparency,Jpeg,Antialiasing,这里的常见用例是用户上传带有白色/彩色背景的jpeg徽标。将白色像素切换为透明像素(相当)简单,但这会留下锯齿瑕疵。理想的解决方案基本上是“撤消”锯齿(给定已知的背景色)。至少,解决方案必须优于ImageMagick的bg_删除脚本(http://imagemagick.org/Usage/scripts/bg_removal).GIMP中的“颜色到Alpha”算法看起来做得相当好。源代码是GPL,可以找到。演示了GIMP算法对徽标之类的东西所做的操作,以及GIMP手册中的“颜色到Alpha”页

这里的常见用例是用户上传带有白色/彩色背景的jpeg徽标。将白色像素切换为透明像素(相当)简单,但这会留下锯齿瑕疵。理想的解决方案基本上是“撤消”锯齿(给定已知的背景色)。至少,解决方案必须优于ImageMagick的bg_删除脚本(http://imagemagick.org/Usage/scripts/bg_removal).

GIMP中的“颜色到Alpha”算法看起来做得相当好。源代码是GPL,可以找到。演示了GIMP算法对徽标之类的东西所做的操作,以及GIMP手册中的“颜色到Alpha”页面


以编程方式实现这一点的最简单方法似乎是使用。

正如承诺的那样,这里有一个适用于常见白色-->alpha用例的有效解决方案。这是运行在Ubuntu 10.04.1 LTS服务器上的标准GIMP安装(2.6.8)

我使用子流程模块从Python(Django内部)执行此代码(code_as_string是上面的代码作为字符串,插入了input_filepath:

gimp_args = (settings.PATH_TO_GIMP, 
    '-i', 
    '--batch-interpreter=python-fu-eval', 
    '-b', code_as_string,
    '-b', 'from gimpfu import pdb; pdb.gimp_quit(True)')

environ = os.environ.copy()
environ['GIMP2_DIRECTORY'] = settings.PATH_TO_GIMP_DIR
p = subprocess.Popen(gimp_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=environ)
rc = p.wait()
if rc:
    logging.error(p.stdout.read())

我不确定您所指的“混叠伪影”是什么。也许您可以包括一个小图像来演示。他所指的混叠来自这样一个事实,特别是在对象的边界处,像素的颜色是背景和对象颜色的混合。@nobar:(反-)假冒伪劣文物是很常见的事情。看到OP的问题,看到他提到ImageMagick,看到你不知道假冒伪劣文物是什么,我怀疑你能帮到他;)GIYF@SyntaxT3rr0r你让我开心。Lol初始测试看起来令人印象深刻,请查看前后的测试案例,了解非常棘手的测试案例:-->哇,这是一个棘手的案例。字母已变成半透明,但至少抗锯齿效果不错!我添加了一个额外的步骤,将剩余的图像“加倍”以帮助消除字母透明度,我将发布完整的GIMP Python脚本以及如何执行它。谢谢你给我指引了正确的方向。
gimp_args = (settings.PATH_TO_GIMP, 
    '-i', 
    '--batch-interpreter=python-fu-eval', 
    '-b', code_as_string,
    '-b', 'from gimpfu import pdb; pdb.gimp_quit(True)')

environ = os.environ.copy()
environ['GIMP2_DIRECTORY'] = settings.PATH_TO_GIMP_DIR
p = subprocess.Popen(gimp_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=environ)
rc = p.wait()
if rc:
    logging.error(p.stdout.read())