Imagecreate VS Imagecreatetruecolor

Для тех кто читал официальную документацию PHP php.net/imagecreate по функции imagecreate библиотеки GD на первый взгляд все ясно: раз в место нее рекомендуется использовать imagecreatetruecolor, зачить так тому и быть. Да и количество цветов обрабатываемое каждой из функций GD, явно говорит в пользу imagecreatetruecolor(). Но вот в случае работы с GIF изображениями, предпочтительнее всеже применять imagecreate().

Изображение формата GIF может содержать максимум 256 цветов, что вполне по силам Imagecreate(). А вот если сравнить кол-во памяти, требуемое каждой из функций на создание одного и того-же изображения, то весы явно склоняются не в пользу imagecreatetruecolor():

$memory = memory_get_usage();
$width = 500;
$height = 500;

$img = imagecreate($width, $height);
echo 'Память, используемя для imagecreate(): ' . (memory_get_usage() - $memory) . ' байт.<br>';
imagedestroy($img);

$img = imagecreatetruecolor($width, $height);
echo 'Память, используемя для imagecreatetruecolor(): ' . (memory_get_usage() - $memory) . ' байт.<br>';
imagedestroy($img);

Результат теста, код которого приведен выше, впечатляет: imagecreate потребляет 536 064 байт оперативной памяти, imagecreatetruecolor - в два раза больше: 1 284 192 байт! Использование imagecreate() может весьма существенно снизить потребление памяти сервера у проэкта, активно использующего работу с изображениями.

Применение imagecreate() из библиотеки PHP GD не сводится только к экономии памяти. С помощью этой функции получается создать изображение формата gif с прозрачными участками без артефактов (три прямоугольных прозрачных участка, идущих по линии снизу слева до верхнего правго угла примера ниже). Пример изображений, с залитым желтым фоном средствами HTML, чтобы лучше была видна разница в фотографиях (черные линии по краям прозрачных областей, качество самой фотографии):

imagecreate()
imagecreatetruecolor()

Фотографии специально увеличены (width и height в теге <img>) до размера 550 на 344 (оригинал 300 на 188). При внимательном изучении можно найти множество отличий в качестве фотографий, размер которых был изменен с помощью этого кода, написанного на PHP с использованием функций GD:

$img_path = 'http://obovsem.org.ua/img/all/articles/24/prev_les.gif';
// Если фотография не загружается, скопируйте ее на свой сервер и смените путь $img_path
$tmp = getimagesize($img_path);
$new_width = 299;
$new_height = 187;
$original_width = $tmp[0];
$original_height = $tmp[1];

$img_src = imagecreatefromgif($img_path);
$new_img = imagecreate($new_width, $new_height);
//$new_img = imagecreatetruecolor($new_width, $new_height);
$color = imagecolorallocate($new_img, 0, 0, 0);
imagecolortransparent($new_img, $color);
imagecopyresampled($new_img, $img_src, 0, 0, 0, 0, $new_width, $new_height, $original_width, $original_height);
header("Content-type: image/gif");
imagegif($new_img);
imagedestroy($img_src);
imagedestroy($new_img);

Вывод: при изменении размеров изображений формата gif, в особенности с прозрачными участками, и других работах над картинками этого формата, следует использовать функцию PHP библиотеки GD imagecreate.

Опубликовано: 2011/05/29
HTML-код ссылки на эту страницу:
<a href="https://petrenco.com/php.php?txt=24" target="_blank">Imagecreate против imagecreatetruecolor или imagecreate VS imagecreatetruecolor в GD PHP</a>
8916
Добавить комментарий
Ваш e-mail: (не виден посетителям сайта)
Ваше имя:
Комментарий:
Символы с картинки:
Только выделенные поля формы добавления комментариев обязательны к заполнению.