将图像中的白色部分转换为透明以模拟打印

时间:2013-06-03 15:16:02

标签: php printing imagemagick rgba cmyk

我目前正在使用PHP和Javascript开发一个AJAX应用程序,允许人们上传将在箔上打印的图像。由于我将使用标准的CMYK打印机,它不会打印任何白色部分,而只是将这些部分留空 - 这一点通常在白纸上没有区别,但在这里确实如此,因为我正在打印在箔上。当你认为灰点会变成半透明的黑色时,会变得更加复杂,而我甚至都没有谈论颜色。

然而,我想创建一个带有alpha通道的PNG文件来模拟打印过程,因此我可以预览在不同背景下保持打印箔片的外观。

现在我已经理解了减法和加色模型的基本理论以及RGBA和CMYK的基本理论,但是它再次只是基础知识,在这里我有点不知道如何继续。我想在理论上你会将每个像素转换成CMYK并将每个通道解释为从透明到彩色而不是从白色到彩色的比例,但是你会如何将其转换回RGBA?

当然,最好的事情是ImageMagick会提供这样的功能....是吗,还是我必须手动循环像素?如果是后者,我将如何进行计算?

我不知道以前这是否是一个问题。我无法在Stackoverflow或Google上找到任何内容,但也许我错过了正确的关键字。任何进一步的阅读,思想或超链接的食物,带有“我们讨论过这一百万次,白痴!”的说明。我们热烈欢迎。

由于

1 个答案:

答案 0 :(得分:2)

您基本上想要的是为上传的图像添加Alpha通道并创建PNG文件。

Alpha通道应代表打印颜色的不透明度。要生成它,您有几个选择:

  1. 获取图像的副本,将其转换为灰度,将其反转并将其用作Alpha通道。

  2. 创建一个Alpha通道,计算从原始图像派生的每个像素的alpha值: alpha = 1.0 - min(红色,绿色,蓝色)(使用255而不是1.0取决于关于你是使用整数还是浮点数。)

  3. 将原始图像转换为CMYK(使用颜色配置文件,而不是您在互联网上找到的不良公式),并将其用作为原始RGB图像创建Alpha通道的基础: alpha =最大(青色,品红色,黄色,黑色)

  4. 想出一个更好的公式来计算每个像素的透明度,例如:alpha = min(0.2 *青色+ 0.5 *洋红色+ 0.1 *黄色+ 0.7 *黑色,1.0)

    < / LI>

    最后一个只是猜测每种颜色的相对不透明度。你当然可以改进它。