Я использую Библиотека PHPImageWorkshop наслоить прозрачные изображения (это одна из тех вещей, в которых он должен превзойти, поэтому я должен делать это неправильно)!
Когда я просто указываю базовый слой (прозрачный логотип PNG), все работает как положено, см. Код:
<?php
use PHPImageWorkshop\ImageWorkshop;
require_once('lib/PHPImageWorkshop/ImageWorkshop.php');
$base_layer = ImageWorkshop::initFromPath( __DIR__.'/img/bg.png' );
$dirPath = dirname(__FILE__).'/output/';
$filename = "file.png";
$base_layer->save( $dirPath, $filename, false, null, 95 );
?>
<img src="/output/file.png">
… В результате получается прозрачный PNG с заданным фоновым изображением, как и ожидалось (здесь я ничего не делаю, кроме копирования изображения).
Проблема возникает, когда я пытаюсь добавить изображение меньшего размера поверх фонового слоя, вместо того, чтобы наложить его, оно перезаписывает мое фоновое изображение, заменяя его полностью?
Здесь я пытаюсь создать маленький серый квадрат (100 x 100) и поместить его в середине моего фонового логотипа (используя мой существующий код):
<?php
use PHPImageWorkshop\ImageWorkshop;
require_once('lib/PHPImageWorkshop/ImageWorkshop.php');
$base_layer = ImageWorkshop::initFromPath( __DIR__.'/img/bg.png' );
// ADDED 2 LINES--------------------------------------------------
$layer_two = ImageWorkshop::initVirginLayer( 100, 100, 'CCCCCC' );
$base_layer->addLayerOnTop( $layer_two, 0, 100, 'MT' );
$dirPath = dirname(__FILE__).'/output/';
$filename = "file.png";
$base_layer->save( $dirPath, $filename, false, null, 95 );
?>
<img src="/output/file.png">
Теперь мой фоновый логотип больше не виден, и у меня есть маленький серый квадрат на прозрачном слое, размер которого был моим фоновым изображением.
Что я делаю не так, пожалуйста?
Спасибо за поиск …
Я понял это после 24 часов, попробовав все … это был не мой код, а изображение PNG, которое я использовал для фонового слоя, который был виноват.
Ранее он был сохранен как индексированный цветовой файл (вместо RGB), а затем повторно сохранен как PNG, поэтому он был в неправильном цветовом режиме.
В конце концов я попробовал тот же код, используя стандартное изображение PNG, и все работало нормально!
Других решений пока нет …