Libvips: JPEGに透明な背景のPNGを挿入-白い背景を取得

作成日 2017年10月25日  ·  4コメント  ·  ソース: libvips/libvips

私はJPEGを持っています:

tile

PNGを挿入したい:

pin

JPEGの128x128の位置。

するとき

vips insert tile.jpg pin.png newimage.jpg 128 128

pin.jpgにはアルファチャネルがあり、tile.jpgにはないので、 Error Output: insert: images must have the same number of bands, or one must be single-band得られます。

だから私はjpgをpngに変換します:

convert tile.jpg png32:tile.png    

これで、AlphaChannelを使用したtile.pngができました。
tile

しかし、私が今電話するとき:

vips insert tile.png pin.png newimage.png 128 128

私は次のようになります:
inserted

挿入されたpin.pngの背景は白です。

vips insert --help-allを確認しましたが、役立つコマンドラインパラメーターが見つかりませんでした。 どちらの画像にもアルファチャンネルがあります。 私の質問:

  • libvips insertコマンドは透明な背景をサポートしていますか?
  • はいの場合:誰かがこの機能の使用方法について私に指摘できますか?
  • ...または多分私はここで何か間違ったことをしていますか?

LG
codecitizen

question

最も参考になるコメント

オーバーレイを拡大して大きな画像に一致させてから、次のように構成できます。

width=$(vipsheader -f width background.jpg)
height=$(vipsheader -f height background.jpg)
vips embed marker.png overlay.png 128 128 $width $height
vips composite "background.jpg overlay.png" final.jpg 2

または、背景の一部を切り取り、作成してから挿入し直します(上記のように)。

これは一般的なことのように思われます。おそらく、位置を指定するオプションがあるはずです。

全てのコメント4件

こんにちは@codecitizen

insertは非常に低レベルの操作です。つまり、ある画像を別の画像の上に配置するだけで、ブレンドは行いません。

現在のlibvipsでは、 blendオプションとともにifthenelseを使用する必要があります。 それはかなり恐ろしいです:

# get the alpha channel from the overlay
vips extract_band marker.png alpha.png 3 --n 1

# get RGB from the overlay
vips extract_band marker.png rgb.png 0 --n 3

# find the size of the overlay
width=$(vipsheader -f width marker.png)
height=$(vipsheader -f height marker.png)

# cut out an area the size of marker from the background
vips extract_area background.jpg bg.png 128 128 $width $height

# blend the marker on top of the chunk of background
vips ifthenelse alpha.png rgb.png bg.png blended.png --blend

# insert the blended image back into the background
vips insert background.jpg blended.png final.jpg 128 128 

これを生成するには:

final

libvips 8.6には、通常のすべてのブレンディングモードを実行できる新しいcomposite演算子があります。 できるよ:

vips composite "background.jpg marker.png" final.jpg 2

2は、 overブレンドモードを意味します。 すべてのPDFブレンドモードをサポートします。 それは一週間かそこらで出るはずです。

@jcupittねえ、ありがとう。 libvips 8.6をインストールしましたが、 vips compositeはうまく機能しました。 可能であれば、2番目の画像の場所を指定する方法がわかりません。

オーバーレイを拡大して大きな画像に一致させてから、次のように構成できます。

width=$(vipsheader -f width background.jpg)
height=$(vipsheader -f height background.jpg)
vips embed marker.png overlay.png 128 128 $width $height
vips composite "background.jpg overlay.png" final.jpg 2

または、背景の一部を切り取り、作成してから挿入し直します(上記のように)。

これは一般的なことのように思われます。おそらく、位置を指定するオプションがあるはずです。

驚くばかり! 迅速なサポートをありがとうございました!

このページは役に立ちましたか?
0 / 5 - 0 評価