1

現在、imagemagick バージョン ImageMagick 6.8.4-6 2013-04-04 Q16 と Imagick 拡張バージョン 1620 を使用しています。

jpg 画像を回転させて別の jpg 画像にマージしようとしていますが、画像をマージすると、画像の周りに黒いボックスが表示されます。

以下で使用しているコードを参照してください。

public function image($images,$x,$y,$angle){

        if($images != "" && $images != NULL){
         $base = $this->instance;
         $layer = new Imagick($images);

         //resize image

         if($this->id == 45){
             $layer->scaleImage(329,0);
         }
         if($this->id == 44){
            $layer->scaleImage(280,0);
         }
         if($this->id == 42){
            $layer->scaleImage(350,0);
         }

         //rotate image

         $layer->rotateImage(new ImagickPixel("none"), $angle);

         //Merge Image
         if($this->id == 44){
          $base->compositeImage($layer, imagick::COMPOSITE_OVER, $x, $y);
         }else{
          $base->compositeImage($layer, imagick::COMPOSITE_DEFAULT, $x, $y);
         }

         $this->image = $base;
        }


    }

$this->id が 44 を使用する場合、テストは現在実行されています。誰かこの問題を明らかにできますか? 前もって感謝します

4

2 に答える 2

1

imagecolortransparent透明性機能を持たせるには、を使用する必要があります。

NB JPGには透明なプロパティがなく、ファイル (および) のみPNGがありGIFTIFFブラウザーはその形式をサポートしていません。

出力ファイルは、これらの形式のいずれかに変換する必要があります。できれPNGば、目的の色の透明度を設定してください。

「PNGに変換してから回転することをお勧めしますか?画像出力はjpgである必要があるため、PNG画像をJPGにマージします(可能であれば)」

再保存するとすぐに透明度が失われますJPG

于 2013-09-13T14:32:10.210 に答える
0

Google経由でこれに出くわしました。他の人が見つけるかもしれないので、これが正しい答えです。透過性を有効にするには setImageMatte(1) を使用する必要があります。

$src->setImageMatte(1); 
$mask->rotateImage(new ImagickPixel('#00000000'), 10); 

を使用して黒が透明になる画像マスクを使用することもできます

$src->compositeImage($mask, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA);
于 2015-09-15T13:11:42.727 に答える