PHPerKaigi 2025

Функции GD и функции для работы с изображениями

Содержание

  • gd_info — Вывод информации о текущей установленной GD библиотеке
  • getimagesize — Получение размера изображения
  • getimagesizefromstring — Получение размера изображения из строки данных
  • image_type_to_extension — Получает расширение файла для типа изображения
  • image_type_to_mime_type — Получение Mime-типа для типа изображения, возвращаемого функциями getimagesize, exif_read_data, exif_thumbnail, exif_imagetype
  • image2wbmp — Выводит изображение в браузер или записывет в файл
  • imageaffine — Вернуть изображение, содержащее аффинно-преобразованное изображение src, используя дополнительную область ограничения
  • imageaffinematrixconcat — Конкатенирует две аффинные матрицы преобразования
  • imageaffinematrixget — Получает матрицу аффинного преобразования
  • imagealphablending — Устанавливает режим сопряжения цветов для изображения
  • imageantialias — Определяет, применять ли функции сглаживания
  • imagearc — Рисует дугу
  • imageavif — Выводит изображение в браузер или записывет в файл
  • imagebmp — Выводит BMP-изображение в браузер или файл
  • imagechar — Рисование символа по горизонтали
  • imagecharup — Рисование символа вертикально
  • imagecolorallocate — Создание цвета для изображения
  • imagecolorallocatealpha — Создаёт цвет для изображения
  • imagecolorat — Получение индекса цвета пиксела
  • imagecolorclosest — Получает ближайший индекс цвета
  • imagecolorclosestalpha — Получает ближайший индекс цвета с учётом прозрачности
  • imagecolorclosesthwb — Получает индекс цвета с заданными тоном, белизной и затемнением
  • imagecolordeallocate — Разрыв ассоциации переменной с цветом для заданного изображения
  • imagecolorexact — Получает индекс цвета
  • imagecolorexactalpha — Получает индекс цвета и альфа-компонента
  • imagecolormatch — Повышает соответствие цветов палитровой версии изображения truecolor версии
  • imagecolorresolve — Получает идентификатор конкретного цвета или его ближайший аналог
  • imagecolorresolvealpha — Получает идентификатор конкретного цвета и альфа-компонента или его ближайший аналог
  • imagecolorset — Устанавливает набор цветов для индекса палитры
  • imagecolorsforindex — Получение цветов, соответствующих индексу
  • imagecolorstotal — Определяет количество цветов в палитре изображения
  • imagecolortransparent — Определяет цвет как прозрачный
  • imageconvolution — Наложение искривляющей матрицы 3х3, используя коэффициент и смещение
  • imagecopy — Копирует часть изображения
  • imagecopymerge — Копирует часть изображения с наложением
  • imagecopymergegray — Копирует часть изображения с наложением в градациях серого
  • imagecopyresampled — Копирование и изменение размера изображения с ресемплированием
  • imagecopyresized — Копирование и изменение размера части изображения
  • imagecreate — Создаёт новое палитровое изображение
  • imagecreatefromavif — Создаёт новое изображение из файла или URL-адреса
  • imagecreatefrombmp — Создаёт новое изображение из файла или URL-адреса
  • imagecreatefromgd — Создаёт новое изображение на основе GD-файла или URL-адреса
  • imagecreatefromgd2 — Создаёт новое изображение на основе GD2-файла или URL-адреса
  • imagecreatefromgd2part — Создаёт новое изображение на основе части GD2-файла или URL-адреса
  • imagecreatefromgif — Создаёт новое изображение из файла или URL-адреса
  • imagecreatefromjpeg — Создаёт новое изображение из файла или URL-адреса
  • imagecreatefrompng — Создаёт новое изображение из файла или URL-адреса
  • imagecreatefromstring — Создаёт новое изображение из представленного строкой потока
  • imagecreatefromtga — Создаёт новое изображение из файла или URL-адреса
  • imagecreatefromwbmp — Создаёт новое изображение из файла или URL-адреса
  • imagecreatefromwebp — Создаёт новое изображение из файла или URL-адреса
  • imagecreatefromxbm — Создаёт новое изображение из файла или URL-адреса
  • imagecreatefromxpm — Создаёт новое изображение из файла или URL-адреса
  • imagecreatetruecolor — Создаёт новое truecolor-изображение
  • imagecrop — Обрезает изображение до заданного прямоугольника
  • imagecropauto — Обрезает изображение автоматически на основе заданного режима
  • imagedashedline — Рисует пунктирную линию
  • imagedestroy — Уничтожает изображение
  • imageellipse — Рисование эллипса
  • imagefill — Заливает фон
  • imagefilledarc — Рисует и заливает дугу
  • imagefilledellipse — Рисование закрашенного эллипса
  • imagefilledpolygon — Рисует закрашенный многоугольник
  • imagefilledrectangle — Рисует закрашенный прямоугольник
  • imagefilltoborder — Заливает цветом
  • imagefilter — Применяет фильтр к изображению
  • imageflip — Переворачивает изображение в заданном режиме
  • imagefontheight — Получение высоты шрифта
  • imagefontwidth — Получение ширины шрифта
  • imageftbbox — Определяет границы прямоугольного обрамления для текста, который библиотека freetype2 выводит на экран путём рендеринга шрифта
  • imagefttext — Наносит текст на изображение путём рендеринга шрифта библиотекой FreeType 2
  • imagegammacorrect — Применяет гамма-коррекцию к GD-изображению
  • imagegd — Выводит GD-изображение в браузер или файл
  • imagegd2 — Выводит GD2-изображение в браузер или файл
  • imagegetclip — Получить отсекающий прямоугольник
  • imagegetinterpolation — Получает метод интерполяции
  • imagegif — Выводит изображение в браузер или записывет в файл
  • imagegrabscreen — Захватывает изображение с экрана
  • imagegrabwindow — Захватывает изображение окна
  • imageinterlace — Включает или выключает интерлейсинг
  • imageistruecolor — Определяет, относится ли изображение к изображениям truecolor
  • imagejpeg — Выводит изображение в браузер или записывет в файл
  • imagelayereffect — Устанавливает флаг альфа-смешивания, чтобы создать эффекты наложения изображений
  • imageline — Рисование линии
  • imageloadfont — Загружает новый шрифт
  • imageopenpolygon — Рисует открытый полигон
  • imagepalettecopy — Копирует палитру из одного изображения в другое
  • imagepalettetotruecolor — Преобразовывает изображение на основе палитры в настоящий цвет
  • imagepng — Выводит PNG-изображение в браузер или файл
  • imagepolygon — Рисует многоугольник
  • imagerectangle — Рисует прямоугольник
  • imageresolution — Получить или установить разрешение изображения
  • imagerotate — Поворачивает изображение с заданным углом
  • imagesavealpha — Определяет, сохранять ли полную информацию альфа-канала при сохранении изображений
  • imagescale — Масштабировать изображение по заданной ширине и высоте
  • imagesetbrush — Устанавливает изображение кисти для рисования линий
  • imagesetclip — Установите прямоугольник ограничения
  • imagesetinterpolation — Устанавливает метод интерполяции
  • imagesetpixel — Рисование точки
  • imagesetstyle — Устанавливает стиль рисования линий
  • imagesetthickness — Устанавливает толщину линий
  • imagesettile — Устанавливает изображение как элемент мозаичной заливки
  • imagestring — Рисует строку текста горизонтально
  • imagestringup — Рисует строку текста вертикально
  • imagesx — Получение ширины изображения
  • imagesy — Получение высоты изображения
  • imagetruecolortopalette — Преобразовывает truecolor-изображение в палитровое
  • imagettfbbox — Определяет границы прямоугольного обрамления для текста, который библиотека freetype2 выводит на экран путём рендеринга шрифта
  • imagettftext — Рисует текст на изображении шрифтом TrueType
  • imagetypes — Возвращает список типов изображений, поддерживаемых PHP сборкой
  • imagewbmp — Выводит изображение в браузер или записывет в файл
  • imagewebp — Вывод WebP-изображение в браузер или файл
  • imagexbm — Выводит XBM-изображение в браузер или в файл
  • iptcembed — Встраивание двоичных IPTC данных в JPEG изображение
  • iptcparse — Разбор двоичных IPTC данных на отдельные теги
  • jpeg2wbmp — Конвертирует изображение из формата JPEG в WBMP
  • png2wbmp — Преобразовывает PNG-файла в файл WBMP
Добавить

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

up
6
chuckstudios at gmail dot com
16 years ago
I wrote a simple function to convert an image resource to PGM (portable graymap) in order to feed it to an OCR program. It works just like the rest of the image output functions, and will convert to grayscale for you:

<?php
function imagepgm($image, $filename = null)
{
$pgm = "P5 ".imagesx($image)." ".imagesy($image)." 255\n";
for(
$y = 0; $y < imagesy($image); $y++)
{
for(
$x = 0; $x < imagesx($image); $x++)
{
$colors = imagecolorsforindex($image, imagecolorat($image, $x, $y));
$pgm .= chr(0.3 * $colors["red"] + 0.59 * $colors["green"] + 0.11 * $colors["blue"]);
}
}
if(
$filename != null)
{
$fp = fopen($filename, "w");
fwrite($fp, $pgm);
fclose($fp);
}
else
{
return
$pgm;
}
}
?>
up
5
michal-ok at o2 dot pl
19 years ago
The image sharpen function (by Alex R. Austin) provided below seems to be very resource hungry and I couldn't make it work on two different servers - trying to sharpen a 413 x 413 image I ended up with "Fatal error: Allowed memory size of 8388608 bytes exhausted" or "Internal Server Error" or the script terminated without notice. Because I had no priviliges to change the default memory limit on these servers I started looking for other sharpen functions. I have come across a php Unsharp Mask function which works like a charm on both of the servers I dealt with. It can be found at http://vikjavev.no/hovudsida/umtestside.php.
up
4
felipensp at gmail dot com
18 years ago
Representation decimal of a color in hexadecimal for use on functions of library GD.

<?php

// Representation hexadecimal
$var = '#FFFFFF';

function
getRgbFromGd($color_hex) {

return
array_map('hexdec', explode('|', wordwrap(substr($color_hex, 1), 2, '|', 1)));

}

print_r(getRgbFromGd($var));

// Output: Array ( [0] => 255 [1] => 255 [2] => 255 )

?>
up
-1
shd at earthling dot net
18 years ago
If you happen to need a way to output a Windows BMP file (e.g. when using the PEAR ExcelWriter), feel free to use the following code:

<?php
function imagebmp ($im, $fn = false)
{
if (!
$im) return false;

if (
$fn === false) $fn = 'php://output';
$f = fopen ($fn, "w");
if (!
$f) return false;

//Image dimensions
$biWidth = imagesx ($im);
$biHeight = imagesy ($im);
$biBPLine = $biWidth * 3;
$biStride = ($biBPLine + 3) & ~3;
$biSizeImage = $biStride * $biHeight;
$bfOffBits = 54;
$bfSize = $bfOffBits + $biSizeImage;

//BITMAPFILEHEADER
fwrite ($f, 'BM', 2);
fwrite ($f, pack ('VvvV', $bfSize, 0, 0, $bfOffBits));

//BITMAPINFO (BITMAPINFOHEADER)
fwrite ($f, pack ('VVVvvVVVVVV', 40, $biWidth, $biHeight, 1, 24, 0, $biSizeImage, 0, 0, 0, 0));

$numpad = $biStride - $biBPLine;
for (
$y = $biHeight - 1; $y >= 0; --$y)
{
for (
$x = 0; $x < $biWidth; ++$x)
{
$col = imagecolorat ($im, $x, $y);
fwrite ($f, pack ('V', $col), 3);
}
for (
$i = 0; $i < $numpad; ++$i)
fwrite ($f, pack ('C', 0));
}
fclose ($f);
return
true;
}
?>

It works the same way as regular imagejpeg/imagepng do and only supports GD2.0 true colour bitmaps (which is what's required by ExcelWriter).
up
-2
ingo at jache dot de
13 years ago
I know this might look somewhat superfluous to others, but i once came across a situation where i needed a *strong* blur on an image without having ImageMagick installed. Executing the convolution-filter several times on the same image is awfully slow and still doesn't give a good blur.

The function below accepts a truecolor-image and a blur-factor between 0.0 and 1.0. Beware: It's still quite slow.

<?php

function blurImage($srcimg,$blur)
{
$blur = $blur*$blur;
$blur = max(0,min(1,$blur));

$srcw = imagesx($srcimg);
$srch = imagesy($srcimg);

$dstimg = imagecreatetruecolor($srcw,$srch);

$f1a = $blur;
$f1b = 1.0 - $blur;


$cr = 0; $cg = 0; $cb = 0;
$nr = 0; $ng = 0; $nb = 0;

$rgb = imagecolorat($srcimg,0,0);
$or = ($rgb >> 16) & 0xFF;
$og = ($rgb >> 8) & 0xFF;
$ob = ($rgb) & 0xFF;

//-------------------------------------------------
// first line is a special case
//-------------------------------------------------
$x = $srcw;
$y = $srch-1;
while (
$x--)
{
//horizontal blurren
$rgb = imagecolorat($srcimg,$x,$y);
$cr = ($rgb >> 16) & 0xFF;
$cg = ($rgb >> 8) & 0xFF;
$cb = ($rgb) & 0xFF;

$nr = ($cr * $f1a) + ($or * $f1b);
$ng = ($cg * $f1a) + ($og * $f1b);
$nb = ($cb * $f1a) + ($ob * $f1b);

$or = $nr;
$og = $ng;
$ob = $nb;

imagesetpixel($dstimg,$x,$y,($nr << 16) | ($ng << 8) | ($nb));
}
//-------------------------------------------------

//-------------------------------------------------
// now process the entire picture
//-------------------------------------------------
$y = $srch-1;
while (
$y--)
{

$rgb = imagecolorat($srcimg,0,$y);
$or = ($rgb >> 16) & 0xFF;
$og = ($rgb >> 8) & 0xFF;
$ob = ($rgb) & 0xFF;

$x = $srcw;
while (
$x--)
{
//horizontal
$rgb = imagecolorat($srcimg,$x,$y);
$cr = ($rgb >> 16) & 0xFF;
$cg = ($rgb >> 8) & 0xFF;
$cb = ($rgb) & 0xFF;

$nr = ($cr * $f1a) + ($or * $f1b);
$ng = ($cg * $f1a) + ($og * $f1b);
$nb = ($cb * $f1a) + ($ob * $f1b);

$or = $nr;
$og = $ng;
$ob = $nb;


//vertical
$rgb = imagecolorat($dstimg,$x,$y+1);
$vr = ($rgb >> 16) & 0xFF;
$vg = ($rgb >> 8) & 0xFF;
$vb = ($rgb) & 0xFF;

$nr = ($nr * $f1a) + ($vr * $f1b);
$ng = ($ng * $f1a) + ($vg * $f1b);
$nb = ($nb * $f1a) + ($vb * $f1b);

$vr = $nr;
$vg = $ng;
$vb = $nb;

imagesetpixel($dstimg,$x,$y,($nr << 16) | ($ng << 8) | ($nb));
}

}
//-------------------------------------------------
return $dstimg;

}


$srcimg = imagecreatefromjpeg("test.jpg");
$dstimg = blurImage($srcimg,0.2);

header('Content-type: image/jpeg');
echo(
imagejpeg($dstimg) );
exit();


?>
up
-2
jeff at lushmedia dot com
21 years ago
I wrote an online overview of the image functions that people might find useful. In addition to a general overview of the various function categories and code samples, I have included many interactive examples of the functions, allowing viewers to experiment with the parameters, and seeing the results in real time. The presentation is located at New York PHP
http://www.nyphp.org/content/presentations/GDintro/
up
-3
delabahan at gmail dot com
8 years ago
This is an example of get high resolution images.

<?php
/**
* Class name : resizeImage
* Created by : wang
* Description : This class is to resize the image from original size to new size
*/
class resizeImage
{
/**
* Function name : resize_img
* Description : This function is to resize image
* @param : $origimg variable is the original image
* @param : $newimg variable is the new image
* @param : $w variable is the width of image
* @param : $f variable is the height of image
*/
public function resize_img($origimg,$newimg,$w,$h){
$info = getimagesize($origimg);
$mime = $info['mime'];

// Make sure that the requested file is actually an image
if(substr($mime, 0, 6) != 'image/')
{
header('HTTP/1.1 400 Bad Request');
return
'Error: requested file is not an accepted type: ' .$origimg;
exit();
}

// Check they extention of image
$extension = image_type_to_extension($info[2]);
if(
strtolower($extension) == '.png'){
$img = $this->resize_imagepng($origimg,$w, $h);
imagepng($img,$newimg);
imagedestroy($img);
}elseif(
strtolower($extension) == '.jpeg'){
$img = $this->resize_imagejpeg($origimg, $w, $h);
imagejpeg($img, $newimg);
imagedestroy($img);
}elseif(
strtolower($extension == '.gif')){
$img = $this->resize_imagegif($origimg, $w, $h);
imagegif($img,$newimg);
imagedestroy($img);
}

}
/**
* End function name : resize_img
*/

/**
* Function name : resize_imagepng
* Description : This function is to resize png image
* @param : $file variable is the original image
* @param : $w variable is the width of image
* @param : $f variable is the height of image
*/
private function resize_imagepng($file, $w, $h) {
list(
$width, $height) = getimagesize($file);
$src = imagecreatefrompng($file);
$dst = imagecreatetruecolor($w, $h);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $w, $h, $width, $height);
return
$dst;
}
/**
* End function name : resize_imagepng
*/

/**
* Function name : resize_imagejpeg
* Description : This function is to resize jpeg image
* @param : $file variable is the original image
* @param : $w variable is the width of image
* @param : $f variable is the height of image
*/
private function resize_imagejpeg($file, $w, $h) {
list(
$width, $height) = getimagesize($file);
$src = imagecreatefromjpeg($file);
$dst = imagecreatetruecolor($w, $h);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $w, $h, $width, $height);
return
$dst;
}
/**
* End function name : resize_imagejpeg
*/

/**
* Function name : resize_imagegif
* Description : This function is to resize gif image
* @param : $file variable is the original image
* @param : $w variable is the width of image
* @param : $f variable is the height of image
*/
private function resize_imagegif($file, $w, $h) {
list(
$width, $height) = getimagesize($file);
$src = imagecreatefromgif($file);
$dst = imagecreatetruecolor($w, $h);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $w, $h, $width, $height);
return
$dst;
}
/**
* End function name : resize_imagegif
*/
}
/**
* End class name : resizeImage
*/
?>
up
-4
mpyw
8 years ago
This is an example of black-and-white imagebmp() implementation.

<?php

/**
* Output a black-and-white BMP image to either the browser or a file.
*
* @param resource $image
* An image resource, returned by one of the image creation functions,
* such as imagecreatetruecolor().
*
* @param string|null $to
* The path or an open stream resource
* (which is automatically being closed after this function returns)
* to save the file to.
* If not set or NULL, the raw image stream will be outputted directly.
*
* @param float $threshold
* The number in the range of 0.0 to 1.0.
* Brighter for larger, or darker for smaller.
*
* @return bool Returns TRUE on success or FALSE on failure.
*
*/
function imagebwbmp($image, $to = null, $threshold = 0.5)
{
if (
func_num_args() < 1) {
$fmt = "imagebwbmp() expects a least 1 parameters, %d given";
trigger_error(sprintf($fmt, func_num_args()), E_USER_WARNING);
return;
}
if (!
is_resource($image)) {
$fmt = "imagebwbmp() expects parameter 1 to be resource, %s given";
trigger_error(sprintf($fmt, gettype($image)), E_USER_WARNING);
return;
}
if (!
is_numeric($threshold)) {
$fmt = "imagebwbmp() expects parameter 3 to be float, %s given";
trigger_error(sprintf($fmt, gettype($threshold)), E_USER_WARNING);
return;
}

if (
get_resource_type($image) !== 'gd') {
$msg = "imagebwbmp(): supplied resource is not a valid gd resource";
trigger_error($msg, E_USER_WARNING);
return
false;
}
switch (
true) {
case
$to === null:
break;
case
is_resource($to) && get_resource_type($to) === 'stream':
case
is_string($to) && $to = fopen($to, 'wb'):
if (
preg_match('/[waxc+]/', stream_get_meta_data($to)['mode'])) {
break;
}
default:
$msg = "imagebwbmp(): Invalid 2nd parameter, it must a writable filename or a writable stream";
trigger_error($msg, E_USER_WARNING);
return
false;
}

if (
$to === null) {
$to = fopen('php://output', 'wb');
}

$biWidth = imagesx($image);
$biHeight = imagesy($image);
$biSizeImage = ((int)ceil($biWidth / 32) * 32 / 8 * $biHeight);
$bfOffBits = 54 + 4 * 2; // Use two colors (black and white)
$bfSize = $bfOffBits + $biSizeImage;

fwrite($to, 'BM');
fwrite($to, pack('VvvV', $bfSize, 0, 0, $bfOffBits));
fwrite($to, pack('VVVvvVVVVVV', 40, $biWidth, $biHeight, 1, 1, 0, $biSizeImage, 0, 0, 0, 0));
fwrite($to, "\xff\xff\xff\x00"); // white
fwrite($to, "\x00\x00\x00\x00"); // black

for ($y = $biHeight - 1; $y >= 0; --$y) {
$byte = 0;
for (
$x = 0; $x < $biWidth; ++$x) {
$rgb = imagecolorsforindex($image, imagecolorat($image, $x, $y));
$value = (0.299 * $rgb['red'] + 0.587 * $rgb['green'] + 0.114 * $rgb['blue']) / 0xff;
$color = (int)($value > $threshold);
$byte = ($byte << 1) | $color;
if (
$x % 8 === 7) {
fwrite($to, pack('C', $byte));
$byte = 0;
}
}
if (
$x % 8) {
fwrite($to, pack('C', $byte << (8 - $x % 8)));
}
if (
$x % 32) {
fwrite($to, str_repeat("\x00", (int)((32 - $x % 32) / 8)));
}
}

return
true;
}
?>
To Top