LoginSignup
1
0

More than 5 years have passed since last update.

RMagickでSVGを扱うと黒く化けちゃうときのWorkAround

Posted at

ハロウィンですね

RMagick(と言うかたぶんImageMagick)でSVGを読んでpngに書き出した時、何故か色が黒になってしまったり、背景の具合によってはべったり真っ黒になってしまうことがある。ハロウィンだからというわけではなくて、たしかこれは半年くらい前にも起きていた。二回目なので対応策をメモ。

現象

canvas = Image.new(size,size){
  self.background_color = 'transparent'
  self.format = 'png'
}
icon = Magick::ImageList.new(iconfile)
icon.resize_to_fit!(size-radius,size-radius)
canvas.composite(icon, CenterGravity,OverCompositeOp)

こんな感じのコードでpngに書き出そうとすると、

svg.png

こういうSVGなのに、書き出すとこうなっちゃう

info_icon_29_75px.png

対策

根本的な原因はわからないのだけど、回避策として、SVGの書き出し方を変えてあげると正しく扱えるようになった。

SVGファイルをillustratorで開いて、Save AS - SVGで保存すると、SVGのオプションダイアログが出る。Advanced Optionというのがあるので、
CSS PropertyStyle Elementになっているところを
Presentation Attributesに変えて保存し直してあげると、ImageMagickでも扱えるようになる。

SVG_Options.png

問題の起きたバージョン

$ ruby -v
ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin16]
$ gem list rmagick

*** LOCAL GEMS ***

rmagick (2.16.0)
$ convert -version
Version: ImageMagick 6.9.9-20 Q16 x86_64 2017-10-15 http://www.imagemagick.org
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0