2017-12-16 46 views
1

저는 Base64 인코딩 이미지를 RoR 애플리케이션에 업로드하고 있습니다. 이미지를 받으면 이미지에 rgb 색 구성표 (올바른 값)가 있습니다. 이미지를 클립 클립으로 업로드하려면 파일에 이미지를 쓸 때 rgb에서 그레이 스케일로 이미지 색 구성표가 변경됩니다.GrayScale에서 Ruby + RMagick + base64 이미지 + RGB 변환이 작동하지 않습니다.

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

색 구성표가 회색이다 : 나는 결과 생성 된 파일을 확인하면

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 이미지입니다 : 여기

는 코드입니다.

추가 정보 : 업로드 된 이미지가 모두 흰색 인 검정색입니다. 동일한 이미지를 빨간색 배경으로 업로드하면 최종 이미지는 RGB 이미지입니다.

+0

모든 채널의 값이 같습니까? 3 채널 모두 동일합니까? 그렇다면 imagemagick의 버전과 파일 생성 방법에 따라 가능합니다. ImageMagick의 어떤 버전을 사용하고 있습니까? 업로드 된 이미지가 원본과 모양이 비슷합니까? 원본에 색상이 있다고 가정하면 업로드 된 버전은 동일하게 보이거나 회색으로 변합니까? – fmw42

+0

안녕하세요, ImageMagick 6.7을 사용하고 있습니다.7-10에서 업로드 된 이미지는 원래 이미지보다 밝아집니다. 예를 들어, 배경 # 242424 (원본 이미지)는 업로드 된 이미지에서 # 303030이됩니다. 감사합니다 – marco

답변

0

이해가 안됩니다. 이미지가 컬러 이미지입니까 아니면 그레이 스케일 이미지입니까?

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 회색을 떠나 : 나는 당신의 입력 영상이 흑백이 아닌 컬러했다 가정하면, 이들 중 하나를 시도 이 명령에서.

가능한 경우 업그레이드를 권할 것입니다. 200 개 이상의 버전이 있습니다.

P. 또한 귀하의 프로필로 인해 문제가 발생할 수도 있습니다. RGB.icc 프로파일이 뭔지 모르겠습니다. 이것은 Adobe RGB 프로파일 또는 sRGB 프로파일입니까?

Command Line ImageMagick을 사용하여 문제를 재현 할 수 있습니까? 그렇다면 사용했던 명령 줄을 게시하십시오. 미안 Ruby 또는 RMagick을 알지 못합니다.

P. 2 밝게/더 어두운 문제 외에도 회색 음영 이미지를 컬러로 변환하려고하면 PNG24 : name.png로 출력을 지정해야합니다. 이것이 그레이 스케일 이미지가 컬러 픽셀을 삽입하지 않고 colorspace = RGB를보고하도록하는 유일한 방법입니다.

+0

hello @ fmw42, 이미지를 jpg에서 png로 변환하면 실제로 그레이 스케일에서 rgb로 색 공간을 변경하는 데 도움이되었습니다. 그러나 업로드 후 색상은 여전히 ​​어두우므로 여기 [link] (https://imgur.com)입니다./a/Q7i9w)를 사용하십시오. RGB 프로파일은 [this one] (http://www.color.org/srgbprofiles.xalter)을 사용하고 있습니다. 내가 사용하는 imagemagick 명령은 다음과 같습니다. convert input.jpg -profile /path/to/sRGB.icc output.png – marco

+0

'@ marco' 게시 한 이미지는 모두 PNG입니다. JPG로 시작했다고합니다. 그러나 JPG는 투명성을 허용하지 않습니다. 그러나 입력 회색조 PNG에는 부분 투명도가 적용됩니다. 어떻게 투명성을 얻었습니까? 귀하의 입력 PNG가 잘못된 색상 공간을보고하고 있습니다 (새로운 답변에 설명되어 있음). 그러나 PNG 청크가 truecoloralpha RGBA로보고하고 있습니다. 따라서 JPG에서 PNG로 변환 할 때 이미 색 공간을 변경하고 어떻게 든 투명도를 추가했습니다. 원래 JPG를 게시해야합니다. – fmw42

0

그레이 스케일 이미지를 RGB PNG로 변환 할 때 ImageMagick 6.9.9.27 및 7.0.7.15에 버그가있는 것 같습니다. Identify -verbose가 그레이 스케일을보고하고 있지만 % [colorspace] 문자열 형식이 PNG 태그와 마찬가지로 sRGB를 제대로보고하고 있습니다. 나는이 버그를보고했다. 예 :

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)