質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

Q&A

解決済

1回答

9814閲覧

透過画像に背景を指定して非透過の画像をつくりたい

kozuchi

総合スコア1193

ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

0グッド

1クリップ

投稿2015/12/22 12:46

ImageMagick で、透過PNGを使ってバッチ処理で jpeg 画像を生成する処理を作っています。

以下のような画像を(画面上ではわからないですが、白い部分が透過です)

input.png
input1.png 変換元画像です

以下のようなコマンドで変換すると

C:> convert input.png output1.jpg

output1.jpg
output1.jpg 変換結果1

のようになります。
これを、任意の色を背景に指定して(以下の例では緑色)、

expectation.jpg
expectation.jpg 期待する結果

のような画像を得たいのです。

現状は以下のような背景用画像を用意して、

green.png
背景用画像

以下のような方法で生成しています。

convert green.png input.png -composite output2.jpg

この方法でも生成はできるのですが、実際の処理では以下の二つの理由で非常に時間がかかっており、
背景画像を読み込むのではなく、 ImageMagick 内で処理させることで、
処理時間を短縮することはできないかと思い質問しました。

  • 画像が非常に大きい
  • 処理するファイルの数が非常に多い

よろしくお願いいたします。

使用しているソフトウェアのバージョンは以下の通りです。

$ cat /etc/issue Ubuntu 14.04.3 LTS \n \l $ convert -version Version: ImageMagick 6.7.7-10 2014-03-06 Q16 http://www.imagemagick.org Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC Features: OpenMP

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ImageMagickは使ったことがないのですが、面白そうなので公式サイトからモジュールをダウンロードして試してみました。
ある背景色の上に画像を重ねる処理はmontageというコマンドでできるようです。

montage -background #00FF00 input.png expectation.jpg ```このような感じで指定した背景色に透過PNG画像を合成したものを出力できますね。

投稿2015/12/22 22:18

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kozuchi

2015/12/23 06:32

ご回答ありがとうございます。 おかげ様で思ったような変換を行うことができました。 一つ問題がありましたのでご報告しておきます。 以下のコマンドライン(bash 上で実行するため'#'を'/'でエスケープしています) を実行したところ $ montage -background \#00FF00 input.png expectation.jpg 以下のように画像サイズが入力画像と変わってしまっています。 $ identify input.png input.png PNG 256x256 256x256+0+0 8-bit DirectClass 2.43KB 0.000u 0:00.000 $ identify expectation.jpg expectation.jpg JPEG 128x126 128x126+0+0 8-bit DirectClass 1.73KB 0.000u 0:00.000 どうも、 montage はデフォルトで画像サイズを変更してしまうようです。 このサイズ変更を回避する方法を調べた結果、 以下の記述で期待した出力を得ることができました。 $ montage -background \#00FF00 -geometry +0+0 input.png expectation.jpg $ identify expectation.jpg expectation.jpg JPEG 256x256 256x256+0+0 8-bit DirectClass 3.67KB 0.000u 0:00.000 どうもありがとうございました。
catsforepaw

2015/12/23 07:38

> どうも、 montage はデフォルトで画像サイズを変更してしまうようです。 なんと、そうでしたか。そこまでは見ていませんでした。回避方法をコメントしていただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問