2015/12/09(水) [n年前の日記]
#1 [dxruby] DXRubyのImageをアルファチャンネル付で保存
DXRuby の Image はアルファチャンネル情報を含むことができるけど。Image#save を使って Image をアルファチャンネル付pngとして保存できるかどうか記憶が怪しいので動作確認。
_imagesave2.rb
アルファチャンネルは保存されないらしい。残念。
どうにかアルファチャンネル付で保存できないものか…。もしかすると、Rubyでpng保存できるライブラリだかモジュールだかがあれば、ソレを利用して実現できるかもしれない。
ググってみたところ、chunky_png なるライブラリがあるようで。コレを使えばどうにかなりそうな予感。
_ChunkyPNG
_wvanbergen/chunky_png
_chunky_png | RubyGems.org | your community gem host
_Medfreak / MNIST画像データ を Chunky_png でPNGにする
gem install chunky_png でインストール。以下のスクリプトを書いて動作確認。
_imagesave_chunky_png.rb
アルファチャンネル付png画像として保存できたっぽい。
_imagesave2.rb
# DXRubyのImage#saveでアルファチャンネルが保存されるかテスト require 'dxruby' img = Image.new(320, 240) # Imageを新規作成 img.line(0, 0, 320, 240, C_BLUE) # 線を引く img.save("test2.png") # png画像として保存 Window.loop do break if Input.keyPush?(K_ESCAPE) Window.draw(0, 0, img) end出力画像は以下。
アルファチャンネルは保存されないらしい。残念。
どうにかアルファチャンネル付で保存できないものか…。もしかすると、Rubyでpng保存できるライブラリだかモジュールだかがあれば、ソレを利用して実現できるかもしれない。
ググってみたところ、chunky_png なるライブラリがあるようで。コレを使えばどうにかなりそうな予感。
_ChunkyPNG
_wvanbergen/chunky_png
_chunky_png | RubyGems.org | your community gem host
_Medfreak / MNIST画像データ を Chunky_png でPNGにする
gem install chunky_png でインストール。以下のスクリプトを書いて動作確認。
_imagesave_chunky_png.rb
# DXRubyのImageをアルファチャンネル付で保存できないかテスト # chunky_pngを利用して32bit PNGに変換してから保存する。 require 'dxruby' require 'chunky_png' # DXRubyのImageを、32bit(アルファチャンネル付)pngで保存する。 # # @param [String] filename 保存ファイル名 # @param [Object] img DXRubyのImage # def save_dxruby_image(filename, img) w = img.width h = img.height png = ChunkyPNG::Image.new(w, h, ChunkyPNG::Color::TRANSPARENT) h.times do |y| w.times do |x| a, r, g, b = img[x, y] png[x, y] = ChunkyPNG::Color.rgba(r, g, b, a) end end png.save(filename, :fast_rgba) end # ここからメイン # 仮Imageを作成 img = Image.new(320, 240) img.line(0, 0, 320, 240, C_BLUE) # 仮Imageを保存してみる save_dxruby_image("test3.png", img) Window.loop do break if Input.keyPush?(K_ESCAPE) Window.draw(0, 0, img) end出力画像は以下。
アルファチャンネル付png画像として保存できたっぽい。
◎ chunky_pngより高速なライブラリがあるらしい。 :
_Medfreak / MNIST画像データ を Chunky_png でPNGにする
によると、
_oily_png
なる高速なライブラリがあるらしい。
_oily_png | RubyGems.org | your community gem host
試しにインストールしてみたり。DevKitをインストールしてある環境で、gem install pily_png。バイナリがビルドされた。
ドキュメントには、require 'chunky_png' のままで効果が得られる、と書いてあるように見えるけど…英語分からんので自信無し。
それはともかく、出力結果が微妙に変わったような気がする…。アルファチャンネルがあることがより分かりやすいデータになったというか。
_oily_png | RubyGems.org | your community gem host
試しにインストールしてみたり。DevKitをインストールしてある環境で、gem install pily_png。バイナリがビルドされた。
ドキュメントには、require 'chunky_png' のままで効果が得られる、と書いてあるように見えるけど…英語分からんので自信無し。
それはともかく、出力結果が微妙に変わったような気がする…。アルファチャンネルがあることがより分かりやすいデータになったというか。
[ ツッコむ ]
以上、1 日分です。