2017-08-25 11 views
0

ImagickのPHPモジュールを頻繁に使用して、イメージを再変換し合成するアプリケーションがあります。最近サーバーのソフトウェアをPHP 5.4からPHP 7.0にアップグレードし、その後Imagickもアップグレードしました。私は今モジュール3.4.3でImageMagic 7.0.3を実行しています。私は私のサイトのphpinfo()とサーバコマンドconvert -versionでこれを確認しました。両方のアップデートはcPanelのWHMで行われました。Imagickのアップデート後にアルファチャンネルに失敗する

次の関数を使用して、指定された16進数を使用してイメージをカラーリングし、アルファシェイプを維持し、更新するまでうまくいっています。

protected function recolor($obj, $hex) 
{ 
    $obj->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT); 
    $obj->setImageBackgroundColor('#' . str_replace('#', '', $hex)); 
    $obj->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE); 
    return $obj; 
} 

成功した(更新前)を再着色画像の例:現在の行動(ポスト更新)と同じ入力の enter image description here

例: enter image description here

私は本当にわからないんだけどこの新しい行動の原因は何か。間違いなくカラーが適用されていますが、供給された画像の形で適用されていません。さらに、ベースレイヤー(このプロセスでは最初のレイヤーが再現される)の後で色付けされたものは、まったく表示されていないように見えます。上に表示されているレイヤーのみが再現されていないレイヤーです。

編集:ここでは色を変更されます元の入力画像の一つである:

https://i.stack.imgur.com/iyaoo.png - ベースカラー

https://i.stack.imgur.com/5W1nr.pngは - バックグラウンド(ベース下コンポジット)

https://i.stack.imgur.com/LUmWd.png - 線画(ベース上コンポジット)

以下、複合プロセスを追加しました。最初に、関数は適用可能なすべてのレイヤーオブジェクトを再現し、それらを合成し、それらを「カラー」画像(上にオオカミの形で掲載された「ベース」レイヤー)にマスクします。その画像が背景に合成され、ラインとロゴが上に追加されて最終的な画像が作成されます。

$this->recolor($this->color, $baseHex); 
$this->recolor($this->eyes, $eyesHex); 
$this->recolor($this->eyebrows, $eyebrowsHex); 
$this->recolor($this->pads, $padsHex); 
$this->recolor($this->nose, $noseHex); 
$this->recolor($this->claws, $clawsHex); 
$this->recolor($this->tongue, $tongueHex); 

$this->image->newImage(800, 598, new \ImagickPixel('transparent')); 
$this->image->compositeImage($this->color, Imagick::COMPOSITE_DEFAULT, 0, 0); 
$this->compositeMarkings(); 
$this->image->compositeImage($this->eyes, Imagick::COMPOSITE_DEFAULT, 0, 0); 
$this->image->compositeImage($this->eyebrows, Imagick::COMPOSITE_DEFAULT, 0, 0); 
$this->image->compositeImage($this->pads, Imagick::COMPOSITE_DEFAULT, 0, 0); 
$this->image->compositeImage($this->nose, Imagick::COMPOSITE_DEFAULT, 0, 0); 
$this->image->compositeImage($this->claws, Imagick::COMPOSITE_DEFAULT, 0, 0); 
$this->image->compositeImage($this->tongue, Imagick::COMPOSITE_DEFAULT, 0, 0); 
$this->mask($this->image, $this->color); 
$this->bg->compositeImage($this->image, Imagick::COMPOSITE_DEFAULT, 0, 0); 
$this->bg->compositeImage($this->lines, Imagick::COMPOSITE_DEFAULT, 0, 0); 
$this->bg->compositeImage($this->logo, Imagick::COMPOSITE_DEFAULT, 0, 0); 
$this->bg->setImageColorSpace(Imagick::COLORSPACE_SRGB);` 
+0

のバージョンをアップグレードすることをお勧めあなたの入力画像を投稿ので、我々はそれをテストすることができます。 IM 7.0.3.xはかなり古く、バグがあるかもしれません。現在のバージョンであるIM 7.0.6.9にアップグレードできますか?また、私のIM 7.0.3.xの正確なマイナーバージョンは何ですか? – fmw42

+0

@ fmw42コメントありがとうございます!元の投稿にオリジナルのベースイメージを追加しました。私はそれがあなたが意味していたことを望む。私の正確なバージョンは 'ImageMagick 7.0.3-0 Q16 x86_64 2016-09-16'です。 –

+0

あなたの背景イメージを投稿してください。あなたがアルファチャンネルを使用してアルファ形をして、それをいくつかの背景画像上に合成していることを理解していればあれは正しいですか?そうでない場合は、何をしているのかを機能的に教えて、すべての入力画像を提供してください。そうすればIM 7.0.3.0を使用してコマンドラインでテストし、現在のバージョンであるIM 7.0.6.9と比較して、修正済みのバグかまだ問題があるかどうかを確認できます。 – fmw42

答えて

2

のImageMagick 7.0.3.0にはバグがあり、私は、コマンドラインで、あなたの問題を再現することができます。

magick 5W1nr.png \(iyaoo.png -alpha extract -background "#988777" -alpha shape \) -compose over -composite LUmWd.png -compose over -composite result7030.png 

enter image description here

しかし、それは、コマンドラインで現在のImageMagick 7.0.6.9で正常に動作します。

magick 5W1nr.png \(iyaoo.png -alpha extract -background "#988777" -alpha shape \) -compose over -composite LUmWd.png -compose over -composite result7069.png 

enter image description here

だから私はあなたがImageMagickの

関連する問題