11 月 9, 2008 • Tags:  • Posted in: 画像処理

RMagickで影つき角丸四角加工した画像で透過背景

RMagickによる影付きの角丸四角加工の処理が、以下のサイトで紹介されていたので参考にさせていただいた。
RMagickで画像を影つき角丸四角に変換する
この記事のコードでは、背景が不透明(コードでは白色)になり、サイトの背景が白以外だと、マッチしない。
そこで、背景を透過させてみた。

加工後(PNG)

PNGの場合は、以下のように最後のコンポジット処理を除外すればOKだ。

shadow.rb


#!/usr/bin/ruby

require 'rubygems'
require 'RMagick'
include Magick

if ARGV.size < 2
  warn "[usage]: #{$0} src dist"
  exit
end
img1 = ImageList.new(ARGV[0])
img2 = Image.new(img1.columns, img1.rows){
   self.background_color = "none"
}
img1.alpha = ActivateAlphaChannel
dr = Draw.new
# 描画色
dr.fill = "white"
# 角丸四角を描画
dr.roundrectangle(0,0,img1.columns-1, img1.rows-1, 20, 20)
dr.draw(img2);
img3 = img1.composite(img2, 0, 0, DstInCompositeOp);

# 影を作成
img3.background_color = "black"
img4 = img3.shadow(5, 5, 3, 0.4)
img5 = img4.composite(img3, 0, 0, OverCompositeOp);
if /png|PNG/ =~ File.extname(ARGV[1])
  #PNGの場合
  img5.write(ARGV[1])
else
  #PNG以外の場合
  img6 = Image.new(img4.columns, img4.rows){
    self.background_color='white'
  }
  img7 = img6.composite(img5, 0, 0, OverCompositeOp);
  img7.write(ARGV[1])
end
exit
元画像

元画像

加工後(JPEG) - 背景色=白
./shadow.rb  2008_08_08_flower.jpg 2008_08_08_flower.jpg

加工後(JPEG)

加工後(PNG) - 背景色=透明
./shadow.rb  2008_08_08_flower.jpg 2008_08_08_flower.png

加工後(PNG)

Leave a Reply

You must be logged in to post a comment.