Я полагаю, что ваше 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();
Большинство из 9 вышеперечисленных шагов можно легко выполнить с помощью GD, за исключением шагов 2 и 6 ... Это можно сделать с помощью цикла, некоторых математических операций и множества вызовов imagecolorat()
и imagecolorset()
.