来自GrayScale的Ruby + RMagick + base64图像+ RGB转换不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了来自GrayScale的Ruby + RMagick + base64图像+ RGB转换不起作用相关的知识,希望对你有一定的参考价值。

我正在将base64编码的图像上传到RoR应用程序。当我收到图像时,它有一个rgb配色方案(正确),当我将文件写入要用paperclip gem上传的文件时,图像颜色方案从rgb变为灰度。

这是代码:

source = src.gsub(/^data:image/(png|jpg|jpeg);base64,/,"")
blob = Base64.decode64(source)
img = Magick::Image.from_blob(blob).first
img.colorspace = Magick::SRGBColorspace
img.add_profile "#{Rails.root.to_s}/lib/color_profiles/RGB.icc"
img.write(url = "#{Rails.root.to_s}/tmp/#{self.id}_logo.png")

image = File.open(url)

如果我检查结果创建的文件,img是正确的RGB图像:

identify -format "%[colorspace]" #{url}

配色方案是灰色。

附加信息:上传的图像全黑,带白色文字,如果我上传红色背景的相同图像,则最终图像正确为RGB图像。

答案

在报告将灰度图像转换为RGB PNG时,ImageMagick 6.9.9.27和7.0.7.15中似乎存在错误。识别-verbose报告灰度,但字符串格式%[colorspace]正确报告sRGB,PNG标记也是如此。我已经报告了这个错误。例如:

convert logo: -colorspace gray logo.jpg
convert logo.jpg PNG24:logo.png
convert logo.png -format "%[colorspace]" info:
sRGB


identify -verbose logo.png
...
Colorspace: Gray
...
png:IHDR.color-type-orig: 2
png:IHDR.color_type: 2 (Truecolor)
另一答案

我不明白。您的图像是彩色图像还是仅灰度图像?

IM 6.7.7.10是在ImageMagick从非线性灰色变为线性灰色并再次返回的时间内。并且还交换了RGB和sRGB。所以你可能有一个版本,其中灰色是线性的(比非线性灰色更暗)或RGB和sRGB交换的地方。您可以使用以下之一转换回非线性(我不记得此时使用哪个)。另一个将从线性转换为非线性。如果我假设您的输入图像是灰度而不是颜色,请尝试以下方法之一:

convert input -colorspace RGB -colorspace gray result

要么

convert input -colorspace sRGB -colorspace gray result

如果它不是灰度,而只是颜色,那么在这些命令中不要使用-colorspace grey。

如果可以,我会敦促你升级。你有超过200个旧版本。

附:您的个人资料也可能导致问题。我不知道RGB.icc配置文件是什么。这是Adobe RGB配置文件还是sRGB配置文件。

你能用Command Line ImageMagick重现你的问题吗?如果是这样,请发布您使用的命令行。对不起,我不知道Ruby或RMagick。

附: 2除了较浅/较暗的问题,如果您尝试将灰度图像转换为颜色,则需要将输出指定为PNG24:name.png。这是强制灰​​度图像报告colorspace = RGB而不插入彩色像素的唯一方法。

以上是关于来自GrayScale的Ruby + RMagick + base64图像+ RGB转换不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ruby​​ 中使用来自 yaml 的登录凭据

CSS技巧之国家公祭日

来自php / ruby​​ / python的人玩框架的优势

怎么添加grayscale.js

网站置灰

网页变成黑白样式