11

これは簡単なことだと思います。

私は2つの写真/JPGを持っていますが、2つが並んでいる1つの写真にそれらをマージしたいと思います。

だから私は写真[A]と写真[B]を持っていて、写真[AB]を(並べて)取得したいと思います。

両方の画像の幅と高さは同じです。この場合、width=200pxおよびheight=300pxです。ただし、2番目の画像は200,0の位置に表示されるはずです。また、imagewidthが200pxよりも小さい場合(200pxはmaxwidthです)

これは私が試したものです(php):

exec($IMAGEMAGICK_PATH."composite picA.jpg -geometry +200+0 picB.jpg picAB.jpg");

「composite」の後に「-size400x300」でも同じことを試しましたが、何も起こりません。問題は、画像picA.jpgが200px移動され、picB.jpgにマージされますが、picAB.jpgの幅はpicB.jpgと同じです。

「-geometry」が正しいコマンドかどうかもわかりません。

4

4 に答える 4

14

-geometry両方のファイルが同じサイズの場合は使用する必要はありません。試す

exec($IMAGEMAGICK_PATH."convert picA.jpg picB.jpg +append picAB.jpg");

列内の画像をマージする場合に使用-appendします。

写真のサイズが同じでない-background none場合は、 orまたは-background blackor-background whiteまたは何でも追加します。この場合、2つの画像をどのように正確にマージするかを制御するために、またはそのようなものを追加することもできます。次に、コマンドラインの前に表示する必要があります。-gravity center-gravity south-gravity+-append

exec($IMAGEMAGICK_PATH."convert big.jpg small.jpg -gravity east -append 2x.jpg");
于 2012-08-22T15:23:40.050 に答える
3

これは、拡張要件のために画像を追加するためのコマンドラインです。左側の画像の(小さい)幅に関係なく、右側の画像を左端から200ピクセルオフセットする必要があります。

 convert                          \
   -background '#FFF9E3'          \
    xc:none -resize 200x1\!       \
    right+narrow.png -append      \
    left+wider.png                \
   -gravity south                 \
   +append                        \
   -crop '400x +0+1'              \
   +repage                        \
    result.png

このパーツxc:none -resize 200x1\!は、高さ1ピクセル、長さ200ピクセルの線を作成し、小さい方の(右の)画像を垂直方向に追加します。

この中間結果に対して、幅の広い(左)画像の水平方向の追加が行われます。これで、401x100の画像が作成され、その上に透明なピクセルの醜い線が表示されます。

そのため、この関数を使用してこの一番上のピクセルラインを削り取り-cropます。

あなたはそれを自分でPHPに翻訳できるはずです...:-)

于 2012-08-22T16:18:07.993 に答える
3

おそらくあなたはそのmontage方法を理解しやすいと思うでしょう(これはおそらくあなたがそれを試したときにあなたが考えていたものですcomposite-しかしそれは画像を重ねるためのものであり、並べたモンタージュのためではありません...)

montage                 \
  -background '#FFF9E3' \
  -geometry 200\!x\>    \
  -gravity west         \
   right+narrow.jpg     \
   left+wider.jpg       \
   result.jpg
于 2012-08-22T17:29:23.077 に答える
3

ここに私がKinoulink(フランスの新興企業)で使用しているPHPコードがあります:

$im1 = new \Imagick($media1);
$im2 = new \Imagick($media2);
$imTotal = new \Imagick();

$im1->cropthumbnailimage(62, 128);
$im2->cropthumbnailimage(62, 128);

$imTotal->newimage(128, 128, '#ffffffff');

$imTotal->compositeimage($im1, \Imagick::COMPOSITE_DEFAULT, 0, 0);
$imTotal->compositeimage($im2, \Imagick::COMPOSITE_DEFAULT, 66, 0);

$imTotal->writeimage($albumCoverFilePath);
于 2013-07-10T17:41:09.167 に答える