Необычный результат при объединении двух прозрачных изображений в php - PullRequest
2 голосов
/ 27 сентября 2011

Мне интересно, делаю ли я что-то не так, или это так же хороший результат, как и я. Оба PNG слева 95x111. Изображение робота имеет 5 пикселей или около того прозрачных пикселей вокруг него, но, кажется, это вызывает проблемы при их объединении?

enter image description here

 $avatar = imagecreatefrompng("../guy.png");
 $borderImg = imagecreatefrompng("../frame.png");

 imagealphablending( $borderImg, false );
 imagesavealpha( $borderImg, true );

 imagecopyresampled($avatar,$borderImg,  0, 0, 0, 0, 95, 111,95, 111);
 imagepng($avatar, $newfilenameBig); 

Я попробовал каждую комбинацию изображений и изображений, которые я могу придумать. Когда я устанавливаю $ avatar в imagesavealpa = true, изображение даже не отображается как все, только рамка. Разве это не кажется странным? Это насколько я собираюсь использовать PHP GD?

ОБНОВЛЕНИЕ: желаемый результат может быть достигнут, когда оба изображения создаются вручную в PS с использованием 24-битного режима. Есть ли способ сделать это, используя imagecopy или аналогичный?

Ответы [ 2 ]

1 голос
/ 01 января 2014

Я думаю, что Jaguar библиотека, которая использует GD, поможет сделать это легко:

например, чтобы создать то, что вы хотите, вам нужно использовать действие наложения, которое работает с GIF, PNG, JPEG и любой поддерживаемый формат:

Примечание Это действие очень быстрое и не основано на пикселях, а наложение может быть любым формат и непрозрачность будут сохранены

use Jaguar\Canvas,
    Jaguar\Transformation;

$transformation = new Transformation(new Canvas('your robots'));
$transformation->overlay(new Canvas('your frame'))
           ->getCanvas()
           ->show();
0 голосов
/ 23 марта 2012

Попробуйте следующий код, он работает нормально.


    $width = 95;
    $height = 111;

    $base_image = imagecreatefrompng("../guy.png");
    $top_image = imagecreatefrompng("../frame.png");

    imagesavealpha($top_image, false);
    imagealphablending($top_image, false);
    imagecopy($base_image, $top_image, 0, 0, 0, 0, $width, $height);
    imagepng($base_image, "merged.png");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...