У меня есть изображение 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)
Любые предложения будут действительно полезными. Заранее спасибо.
Ваше изображение 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()
.