изображение — ограничение цветовой палитры с помощью переполнения стека

Есть ли способ ограничить изображение пользовательской цветовой палитрой из 15 цветов (плюс прозрачность)? Я хотел бы настроить цветовую палитру изображений для определенного набора цветов, используя функции PHP.

Прямо сейчас я загружаю изображения с помощью imagecreatefrompng (), но они содержат палитру RGB по умолчанию. У меня также есть изображение 4x4px с каждым желаемым цветом.

Я пытался использовать imagepalettecopy (), но, похоже, это не имеет никакого эффекта.

    $palette = imagecreatefrompng(public_path() . "/assets/palette2.png");
$original = imagecreatefrompng(public_path() . '/uploads/test1.png');
$resampled = imagecreatetruecolor(5, 5);

imagepalettecopy($resampled, $palette);
imagecopyresampled($resampled, $original, 0, 0, 0, 0, 5, 5, imagesx($original), imagesy($original));
imagepalettecopy($resampled, $palette);

Спасибо!

0

Решение

Я нашел следующее, чтобы отлично работать с чистым PHP. Не уверен, как это складывается с точки зрения производительности, но он обеспечивает желаемые результаты:

    $palette = imagecreatefrompng(public_path() . "/assets/palette.png");
$original1 = imagecreatefrompng(public_path() . '/uploads/test1.png');
$resampled1 = imagecreatetruecolor(5, 5);
$adjusted1 = imagecreatetruecolor(5, 5);
imagetruecolortopalette($palette, false, 16);

imagecopyresampled($resampled1, $original1, 0, 0, 0, 0, 5, 5, imagesx($original1), imagesy($original1));

for ($row = 0; $row < 5; $row++) {
for ($column = 0; $column < 5; $column++) {
$rgb1 = imagecolorat($resampled1, $column, $row);
$color1 = imagecolorsforindex($resampled1, $rgb1);
$closestRgb1 = imagecolorclosest($palette, $color1['red'], $color1['green'], $color1['blue']);
$closestColor1 = imagecolorsforindex($palette, $closestRgb1);
imagesetpixel($adjusted1, $column, $row, imagecolorallocate($adjusted1, $closestColor1['red'], $closestColor1['green'], $closestColor1['blue']));
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]