来自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转换不起作用的主要内容,如果未能解决你的问题,请参考以下文章