Imagick черные полосы

Я недавно обновил ImageMagick и Centos на моем сервере до 7.0.7-0 и cantos7. Я сталкиваюсь с очень уникальной проблемой, связанной с моими скриптами PHP Imagick, где черные полосы показывают все созданные изображения.

Вот живой пример проблемы. Этот лев обычно перекрашивал бы в пользовательский ввод, и все еще, кажется, перекрашивает должным образом, но эти черные линии являются новыми и явно очень разрушительными. Это какая-то проблема конфигурации с imagemagick или конфликт с новой версией, но тот же код хорошо работал до обновления сервера.

Генератор изображений

public function drawPet($species, $baseHex, $eyeHex, $age, $gender, $genderHex, $markings, $layer1, $layer2, $layer3, $layer4)
{
// Call pet data
$pet = DataPet::where('name', $species)->first();

// Instantiate adult image objects
if ($age == 'adult')
{
$base = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/base_color.png");
$eye = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/eye_color.png");
$lines = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/lines.png");
$shading = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/shading.png");
$lights = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/lights.png");
if ($pet->name == 'snake') {
$scales = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/snake/scales.png");
}

// Checks for gendered attribute
if ($pet->gendered == true )
{
if ($gender == $pet->gendered_value)
{
$genderBase = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/" . $pet->gendered_attribute . "_color.png");
$genderLines = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/" . $pet->gendered_attribute . "_lines.png");
$genderShading = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/" . $pet->gendered_attribute . "_shading.png");
$genderLights = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/" . $pet->gendered_attribute . "_lights.png");

// Recolors attribute if recolorable
if ($pet->gendered_recolor == true)
{
$genderBase->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$genderBase->setImageBackgroundColor($genderHex);
$genderBase->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
}
}
}
}

// Instantiate baby image objects
else {
$base = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/baby/base_color.png");
$eye = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/baby/eye_color.png");
$lines = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/baby/lines.png");
$shading = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/baby/shading.png");
$lights = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/baby/lights.png");
if ($pet->name == 'snake') {
$scales = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/snake/baby/scales.png");
}
}

// Recolors base
$base->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$base->setImageBackgroundColor($baseHex);
$base->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);

// Recolors eyes
$eye->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$eye->setImageBackgroundColor($eyeHex);
$eye->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);

// Begin composite
// If extra layers: under markings
if ($pet->layer_name1)
{
if ($pet->layer_pos1 == 1)
{
if ($age == 'adult')
{
$layer = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/" . $pet->layer_name1 . ".png");
}

else {
$layer = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/baby/" . $pet->layer_name1 . ".png");
}

if ($pet->layer_recolor1 == 1)
{
$layer->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$layer->setImageBackgroundColor($layer1);
$layer->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
}

$base->compositeImage($layer, imagick::COMPOSITE_DEFAULT, 0, 0);
}
}

if ($pet->layer_name2)
{
if ($pet->layer_pos2 == 1)
{
if ($age == 'adult')
{
$layer = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/" . $pet->layer_name2 . ".png");
}

else {
$layer = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/baby/" . $pet->layer_name2 . ".png");
}

if ($pet->layer_recolor2 == 1)
{
$layer->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$layer->setImageBackgroundColor($layer2);
$layer->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
}

$base->compositeImage($layer, imagick::COMPOSITE_DEFAULT, 0, 0);
}
}

if ($pet->layer_name3)
{
if ($pet->layer_pos3 == 1)
{
if ($age == 'adult')
{
$layer = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/" . $pet->layer_name3 . ".png");
}

else {
$layer = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/baby/" . $pet->layer_name3 . ".png");
}

if ($pet->layer_recolor3 == 1)
{
$layer->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$layer->setImageBackgroundColor($layer3);
$layer->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
}

$base->compositeImage($layer, imagick::COMPOSITE_DEFAULT, 0, 0);
}
}

if ($pet->layer_name4)
{
if ($pet->layer_pos4 == 1)
{
if ($age == 'adult')
{
$layer = new \Imagick("./img/pets/" . $species . "/" . $pet->layer_name4 . ".png");
}

else {
$layer = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/baby/" . $pet->layer_name4 . ".png");
}

if ($pet->layer_recolor4 == 1)
{
$layer->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$layer->setImageBackgroundColor($layer4);
$layer->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
}

$base->compositeImage($layer, imagick::COMPOSITE_DEFAULT, 0, 0);
}
}

// Layer markings
if ($age == 'adult')
{
foreach ($markings as $marking => $color)
{
// Weeds empty markings
if ($marking != '') {
// Ensures pet has region
$mData = DataMarking::where('name', $marking)->first();

if ($mData) {
if ($mData->region == 'leg' && $pet->legs == 1) {
$marking = new \Imagick("./img/pets/" . $species . "/markings/" . $marking . ".png");
$marking->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$marking->setImageBackgroundColor($color);
$marking->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
$base->compositeImage($marking, imagick::COMPOSITE_DEFAULT, 0, 0);
}

if ($mData->region == 'tail' && $pet->tail == 1) {
$marking = new \Imagick("./img/pets/" . $species . "/markings/" . $marking . ".png");
$marking->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$marking->setImageBackgroundColor($color);
$marking->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
$base->compositeImage($marking, imagick::COMPOSITE_DEFAULT, 0, 0);
}

if ($mData->region == 'ear' && $pet->ears == 1) {
$marking = new \Imagick("./img/pets/" . $species . "/markings/" . $marking . ".png");
$marking->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$marking->setImageBackgroundColor($color);
$marking->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
$base->compositeImage($marking, imagick::COMPOSITE_DEFAULT, 0, 0);
}

if ($mData->region == 'wing' && $pet->wings == 1) {
$marking = new \Imagick("./img/pets/" . $species . "/markings/" . $marking . ".png");
$marking->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$marking->setImageBackgroundColor($color);
$marking->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
$base->compositeImage($marking, imagick::COMPOSITE_DEFAULT, 0, 0);
}

if ($mData->region != 'leg' && $mData->region != 'tail' && $mData->region != 'ear' && $mData->region != 'wing') {
$marking = new \Imagick("./img/pets/" . $species . "/markings/" . $marking . ".png");
$marking->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$marking->setImageBackgroundColor($color);
$marking->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
$base->compositeImage($marking, imagick::COMPOSITE_DEFAULT, 0, 0);
}
}
}
}
}

else
{
foreach ($markings as $marking => $color)
{
// Weeds empty markings
if ($marking != '') {
// Ensures pet has region
$mData = DataMarking::where('name', $marking)->first();

if ($mData) {
if ($mData->region == 'leg' && $pet->legs == 1) {
$marking = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/baby/markings/" . $marking . ".png");
$marking->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$marking->setImageBackgroundColor($color);
$marking->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
$base->compositeImage($marking, imagick::COMPOSITE_DEFAULT, 0, 0);
}

if ($mData->region == 'tail' && $pet->tail == 1) {
$marking = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/baby/markings/" . $marking . ".png");
$marking->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$marking->setImageBackgroundColor($color);
$marking->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
$base->compositeImage($marking, imagick::COMPOSITE_DEFAULT, 0, 0);
}

if ($mData->region == 'ear' && $pet->ears == 1) {
$marking = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/baby/markings/" . $marking . ".png");
$marking->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$marking->setImageBackgroundColor($color);
$marking->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
$base->compositeImage($marking, imagick::COMPOSITE_DEFAULT, 0, 0);
}

if ($mData->region == 'wing' && $pet->wings == 1) {
$marking = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/baby/markings/" . $marking . ".png");
$marking->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$marking->setImageBackgroundColor($color);
$marking->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
$base->compositeImage($marking, imagick::COMPOSITE_DEFAULT, 0, 0);
}

if ($mData->region != 'leg' && $mData->region != 'tail' && $mData->region != 'ear' && $mData->region != 'wing') {
$marking = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/baby/markings/" . $marking . ".png");
$marking->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$marking->setImageBackgroundColor($color);
$marking->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
$base->compositeImage($marking, imagick::COMPOSITE_DEFAULT, 0, 0);
}
}
}
}
}

// If extra layers: over markings
if ($pet->layer_name1)
{
if ($pet->layer_pos1 == 0)
{
if ($age == 'adult')
{
$layer = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/" . $pet->layer_name1 . ".png");
} else
{
$layer = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/baby/" . $pet->layer_name1 . ".png");
}

if ($pet->layer_recolor1 == 1)
{
$layer->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$layer->setImageBackgroundColor($layer1);
$layer->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
}

$base->compositeImage($layer, imagick::COMPOSITE_DEFAULT, 0, 0);
}
}

if ($pet->layer_name2)
{
if ($pet->layer_pos2 == 0)
{
if ($age == 'adult')
{
$layer = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/" . $pet->layer_name2 . ".png");
}

else
{
$layer = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/baby/" . $pet->layer_name2 . ".png");
}

if ($pet->layer_recolor2 == 1)
{
$layer->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$layer->setImageBackgroundColor($layer2);
$layer->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
}

$base->compositeImage($layer, imagick::COMPOSITE_DEFAULT, 0, 0);
}
}

if ($pet->layer_name3)
{
if ($pet->layer_pos3 == 0)
{
if ($age == 'adult')
{
$layer = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/" . $pet->layer_name3 . ".png");
}

else
{
$layer = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/baby/" . $pet->layer_name3 . ".png");
}

if ($pet->layer_recolor3 == 1)
{
$layer->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$layer->setImageBackgroundColor($layer3);
$layer->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
}

$base->compositeImage($layer, imagick::COMPOSITE_DEFAULT, 0, 0);
}
}

if ($pet->layer_name4)
{
if ($pet->layer_pos4 == 0)
{
if ($age == 'adult')
{
$layer = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/" . $pet->layer_name4 . ".png");
}

else
{
$layer = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/" . $species . "/baby/" . $pet->layer_name4 . ".png");
}

if ($pet->layer_recolor4 == 1)
{
$layer->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$layer->setImageBackgroundColor($layer4);
$layer->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);
}

$base->compositeImage($layer, imagick::COMPOSITE_DEFAULT, 0, 0);
}
}

// Lion tail tuft
if ($pet->name == 'lion')
{
if ($age == 'adult') {
$tuft = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/lion/tailtuft.png");
} else {
$tuft = new \Imagick(dirname(dirname(dirname(dirname(__FILE__)))) . "/public_html/img/pets/lion/baby/tailtuft.png");
}

$tuft->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT);
$tuft->setImageBackgroundColor($genderHex);
$tuft->setImageAlphaChannel(Imagick::ALPHACHANNEL_SHAPE);

$base->compositeImage($tuft, imagick::COMPOSITE_DEFAULT, 0, 0);
}

$base->compositeImage($eye, imagick::COMPOSITE_DEFAULT, 0, 0);
$base->compositeImage($shading, imagick::COMPOSITE_MULTIPLY, 0,0);
$base->compositeImage($lights, imagick::COMPOSITE_OVERLAY, 0, 0);
if ($pet->name == 'snake') {
$base->compositeImage($scales, imagick::COMPOSITE_OVERLAY, 0, 0);
}
$base->compositeImage($lines, imagick::COMPOSITE_DEFAULT, 0, 0);

if (isset($genderBase))
{
$base->compositeImage($genderBase, imagick::COMPOSITE_DEFAULT, 0, 0);
$base->compositeImage($genderShading, imagick::COMPOSITE_MULTIPLY, 0,0);
$base->compositeImage($genderLights, imagick::COMPOSITE_OVERLAY, 0, 0);
$base->compositeImage($genderLines, imagick::COMPOSITE_DEFAULT, 0,0);
}

// Outputs final result
$base->setImageColorSpace(imagick::COLORSPACE_SRGB);
return $base;
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector