Раскрасьте изображение PNG с помощью PHP GD

У меня есть изображение PNG с прозрачным фоном и белым кружком. Я пытаюсь раскрасить белый круг в определенный цвет, но мне сложно использовать этот код:

$src = imagecreatefrompng('circle.png'); $handle = imagecolorclosest($src, 255,255,255); imagecolorset($src,$handle,100,100,100); $new_image_name = "new_image.png"; imagepng($src,$new_image_name); imagedestroy($src) 

Любые предложения будут действительно полезными. Заранее спасибо.

Related of "Раскрасьте изображение PNG с помощью PHP GD"

Ваше изображение PNG, которое я предполагаю, имеет альфа-прозрачность, что делает imagecolorset() бесполезным, поскольку вы просто удалите прозрачность (или закончите с зубчатыми краями).

Если у вас есть только круг, вам лучше создать новое изображение с помощью GD и рисовать круг с помощью imagefilledellipse() .

Однако, если «круг» немного сложнее, чем просто круг, что значительно усложняет ваш код. Однако вы можете использовать библиотеку абстракции GD, такую ​​как WideImage, чтобы значительно упростить эту задачу. Итак, чтобы раскрасить прозрачную «маску», вы можете просто сделать следующее с помощью WideImage:

 // 1. Load Image $original = WideImage::load('circle.png'); // 2. Get Transparency Mask $mask = $original->getMask(); // 3. Dispose Original $original->destroy(); // 4. Create New Image $colorized = WideImage::createTrueColorImage($mask->getWidth(), $mask->getHeight()); // 5. Colorize Image $bg = $colorized ->allocateColor(255, 0, 0); $colorized->fill(0, 0, $bg); // 6. Apply Transparency Mask $colorized->applyMask($mask); // 7. Dispose mask $mask->dispose(); // 8. Save colorized $colorized->save($new_image_name); // 9. Dispose colorized $colorized->dispose(); - // 1. Load Image $original = WideImage::load('circle.png'); // 2. Get Transparency Mask $mask = $original->getMask(); // 3. Dispose Original $original->destroy(); // 4. Create New Image $colorized = WideImage::createTrueColorImage($mask->getWidth(), $mask->getHeight()); // 5. Colorize Image $bg = $colorized ->allocateColor(255, 0, 0); $colorized->fill(0, 0, $bg); // 6. Apply Transparency Mask $colorized->applyMask($mask); // 7. Dispose mask $mask->dispose(); // 8. Save colorized $colorized->save($new_image_name); // 9. Dispose colorized $colorized->dispose(); 

Большинство из 9 шагов выше можно легко выполнить с помощью GD, за исключением шагов 2 и 6 … Это все еще можно сделать с помощью цикла, некоторых математических imagecolorat() и множества вызовов imagecolorat() и imagecolorset() .