我目前正在使用PHP和Javascript开发一个AJAX应用程序,该应用程序允许人们上传将在箔纸上打印的图像。因为我将使用标准的CMYK打印机,所以它不会打印任何白色部分,而只是让这些斑点留白——这在白纸上通常不会有什么区别,但在这里却有,因为我是在箔纸上打印的。当你考虑到一个灰点会变成半透明的黑色时,情况就变得更复杂了,我甚至还没有谈到颜色。
然而,我想创建一个带有alpha通道的PNG文件,以模拟打印过程,这样我就可以预览打印出来的箔在不同背景下的外观。
现在我确实了解减法和加色模型的基本理论,也了解RGBA和CMYK,但这只是基础知识,在这里我有点不知道如何进行。我猜理论上你会将每个像素转换为CMYK,并将每个通道解释为从透明到彩色的比例,而不是从白色到彩色,但你如何将其转换回RGBA?
当然,最好的事情是ImageMagick能够提供这样的功能....还是我必须手动遍历像素?如果是后者,我该如何计算呢?
我不知道以前是否有过这样的问题。我在Stackoverflow或Google上都找不到任何东西,但也许我只是错过了正确的关键字。任何进一步的阅读,思考的食物或超链接,并注明"我们讨论过一百万次了,白痴!"我们将受到热烈欢迎。
谢谢
你要做的就是为上传的图片添加一个alpha通道,并创建一个PNG文件。
alpha通道应该表示打印颜色的不透明度。要生成它,您有几个选项:
-
取图像的副本,将其转换为灰度,将其反转并使用它作为alpha通道。
-
创建一个alpha通道,计算从原始图像派生的每个像素的alpha值:alpha = 1.0 - min(红,绿,蓝)(使用255而不是1.0取决于你是使用整数还是浮点数)
-
将原始图像转换为CMYK(使用颜色配置文件,而不是您在互联网上找到的糟糕公式),并将其作为原始RGB图像创建alpha通道的基础:alpha = max(青色,品红色,黄色,黑色)。
-
想出一个更好的公式来计算每个像素的透明度,如:alpha = min(0.2 *青色+ 0.5 *品红+ 0.1 *黄色+ 0.7 *黑色,1.0)
最后一个只是对每种颜色的相对不透明度的猜测。