PHPerKaigi 2025

imagepalettetotruecolor

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

imagepalettetotruecolorПреобразовывает изображение на основе палитры в настоящий цвет

Описание

imagepalettetotruecolor(GdImage $image): bool

Функция преобразовывает изображение на основе палитры, которое создали функцией наподобие imagecreate(), в изображение с истинным цветом, как это делает функция imagecreatetruecolor().

Список параметров

image

Объект GdImage, который возвращает одна из функций, создающих изображения, например, imagecreatetruecolor().

Возвращаемые значения

Функция возвращает true, если преобразование завершилось, или если исходное изображение уже относится к truecolor-изображению, иначе возвращает значение false.

Список изменений

Версия Описание
8.0.0 Параметр image теперь ожидает экземпляр класса GdImage; раньше параметр ждал корректный gd-ресурс (resource).

Примеры

Пример #1 Пример преобразования объекта изображения в изображение с истинным цветом

<?php

// В целях обратной совместимости
if (!function_exists('imagepalettetotruecolor')) {
function
imagepalettetotruecolor(&$src)
{
if (
imageistruecolor($src)) {
return (
true);
}

$dst = imagecreatetruecolor(imagesx($src), imagesy($src));

imagecopy($dst, $src, 0, 0, 0, 0, imagesx($src), imagesy($src));

$src = $dst;

return (
true);
}
}

// Анонимное замыкание-помощник
$typeof = function () use ($im) {
echo
'typeof($im) = ' . (imageistruecolor($im) ? 'true color' : 'palette'), PHP_EOL;
};

// Создаём изображение на основе палитры
$im = imagecreate(100, 100);
$typeof();

// Преобразуем цвета изображения к истинным
imagepalettetotruecolor($im);
$typeof();

?>

Результат выполнения приведённого примера:

typeof($im) = palette
typeof($im) = true color

Смотрите также

  • imagecreatetruecolor() - Создаёт новое truecolor-изображение
  • imageistruecolor() - Определяет, относится ли изображение к изображениям truecolor
Добавить

Примечания пользователей 3 notes

up
2
Polda18
10 years ago
PHP ver 5.4.24 does not support this function (it has not been defined). To get rid of this, you must copy image resource to new image created by function imagecreatetruecolor();

Example with image loaded from GIF file:

$image = imagecreatefromgif("path/to/gif/file.gif"); //create an image from GIF
$width = imagesx($image); //get width of source image
$height = imagesy($image); //get height of source image
$image2 = imagecreatetruecolor($width,$height); //create new image of true colors with given width and height
imagecopy($image2,$image,0,0,0,0,$width,$height); //copy source image to new one

header("Content-Type: image/jpeg"); //set header for JPG image
imagejpg($image2); //render JPg image into browser

imagedestroy($image); //free up memory
imagedestroy($image2);
up
0
walf - iftfy
7 years ago
here the working version of walf's solution

<?php
// Backwards compatiblity
if (!function_exists('imagepalettetotruecolor')) {
function
imagepalettetotruecolor(&$src) {
if (
imageistruecolor($src)) {
return
true;
}

$dst = imagecreatetruecolor(imagesx($src), imagesy($src));

imagealphablending($dst, false);//prevent blending with default black
$transparent = imagecolorallocatealpha($dst, 255, 255, 255, 127);//change the RGB values if you need, but leave alpha at 127
imagefilledrectangle($dst, 0, 0, imagesx($src), imagesy($src), $transparent);//simpler than flood fill
imagealphablending($dst, true);//restore default blending

imagecopy($dst, $src, 0, 0, 0, 0, imagesx($src), imagesy($src));
imagedestroy($src);

$src = $dst;
return
true;
}
}
?>
up
-2
walf
10 years ago
The backwards compatibility example does not preserve transparency. You must first wipe out the default black background on the new image:

<?php
// Backwards compatiblity
if (!function_exists('imagepalettetotruecolor')) {
function
imagepalettetotruecolor(&$src) {
if (
imageistruecolor($src)) {
return
true;
}

$dst = imagecreatetruecolor(imagesx($src), imagesy($src));

imagealphablending($dst, false);//prevent blending with default black
$transparent = imagecolorallocatealpha($new_image, 255, 255, 255, 127);//change the RGB values if you need, but leave alpha at 127
imagefilledrectangle($dst, 0, 0, $imagesx($src), imagesy($src), $transparent);//simpler than flood fill
imagealphablending($dst, true);//restore default blending

imagecopy($dst, $src, 0, 0, 0, 0, imagesx($src), imagesy($src));
imagedestroy($src);

$src = $dst;
return
true;
}
}
?>
To Top