- Подскажите скрипт для обрезки изображения автоматом (при загрузке страницы)?
- 3 ответа 3
- Похожие
- Подписаться на ленту
- imagecrop
- Список параметров
- Возвращаемые значения
- Список изменений
- Примеры
- Смотрите также
- User Contributed Notes
- Обработка изображений в PHP
- Открытие изображения
- Изменение размера изображения (resize)
- Результат
- Обрезать изображение (crop)
- Результат
- Поворот изображения
- Зеркальное отражение
- Добавление фона
- Фильтры
- IMG_FILTER_NEGATE
- IMG_FILTER_GRAYSCALE
- IMG_FILTER_COLORIZE
- IMG_FILTER_BRIGHTNESS
- IMG_FILTER_CONTRAST
- IMG_FILTER_EDGEDETECT
- IMG_FILTER_EMBOSS
- IMG_FILTER_GAUSSIAN_BLUR
- IMG_FILTER_SELECTIVE_BLUR
- IMG_FILTER_MEAN_REMOVAL
- IMG_FILTER_SMOOTH
- IMG_FILTER_PIXELATE
- Сохранение
- Вывод изображения в браузер
- Сохранение изображения в файл на сервере
- Вывод в браузер и сохранение в файл
Подскажите скрипт для обрезки изображения автоматом (при загрузке страницы)?
Пример — есть картинка 1000х1000 в каталоге image, нужно ее обрезать до 800×400 и поместить в папку image_crop. Обрезка должна проходить по системе — уменьшить ширину до 800 (станет 800х800) и потом обрезать по 200 снизу и сверху что бы вышло 800х400 Помогите примером кода или ссылками на готовые решения.
3 ответа 3
if(!file_exists( $srcFile)) < header('Not found', true, 404); echo "File not found: " . htmlspecialchars( $srcFile); exit(); >list( $width, $height, $type, $attr) = getimagesize( $srcFile); switch( $type) < case IMAGETYPE_GIF: $imagedata = imagecreatefromgif( $srcFile); break; case IMAGETYPE_JPEG: case IMAGETYPE_JPEG2000: $imagedata = imagecreatefromjpeg( $srcFile); break; case IMAGETYPE_PNG: $imagedata = imagecreatefrompng( $srcFile); break; default: $imagedata = false; >if( false === $imagedata) < header('Bad image type', true, 500); echo "Image type not supported: " . $type; exit(); >// Resize the image $thumbW = 800; $thumbH = 400; $proportion = $thumbW / $thumbH; $k = $width / $height; $thumbdata = imagecreatetruecolor( $thumbW, $thumbH); imagefill( $thumbdata, 0, 0, 0xFFFFFF); if( $k > $proportion) < // fit height, crop on left/right sides $scale = $thumbH / $height; $srcW = $height * $proportion; $srcH = $height; $srcX = ( $width - $thumbW / $scale) / 2; $srcY = 0; >else < // fit width, crop on top/bottom $scale = $thumbW / $width; $srcW = $width; $srcH = $height / $proportion; $srcX = 0; $srcY = ( $height - $thumbH / $scale) / 2; >imagecopyresampled( $thumbdata, $imagedata, 0, 0, $srcX, $srcY, $thumbW, $thumbH, $srcW, $srcH); imagejpeg( $thumbdata, $dstFile); header('Content-type: image/jpeg'); readfile( $dstFile);
давно я это делал , но код был мною проверен но давненько
Я использую это библиотеку. Работает на ура. https://github.com/claviska/SimpleImage
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.7.27.43548
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
imagecrop
Обрезает изображение до заданной прямоугольной области и возвращает полученное изображение. Заданный параметр image не изменяется.
Список параметров
Объект GdImage , возвращаемый одной из функций создания изображений, например, такой как imagecreatetruecolor() .
Обрезанный прямоугольник в виде массива ( array ) с ключами x , y , width и height .
Возвращаемые значения
Возвращает объект обрезанного изображения в случае успешного выполнения или false в случае возникновения ошибки.
Список изменений
Версия | Описание |
---|---|
8.0.0 | image теперь ожидает экземпляр GdImage ; ранее ожидался корректный gd ресурс ( resource ). |
8.0.0 | В случае успешного выполнения функция теперь возвращает экземпляр GDImage ; ранее возвращался ресурс ( resource ). |
Примеры
Пример #1 Пример использования imagecrop()
В этом примере показано, как обрезать изображение до квадратной области.
$im = imagecreatefrompng ( ‘example.png’ );
$size = min ( imagesx ( $im ), imagesy ( $im ));
$im2 = imagecrop ( $im , [ ‘x’ => 0 , ‘y’ => 0 , ‘width’ => $size , ‘height’ => $size ]);
if ( $im2 !== FALSE ) imagepng ( $im2 , ‘example-cropped.png’ );
imagedestroy ( $im2 );
>
imagedestroy ( $im );
?>?php
Смотрите также
User Contributed Notes
- Функции GD и функции для работы с изображениями
- gd_info
- getimagesize
- getimagesizefromstring
- image_type_to_extension
- image_type_to_mime_type
- image2wbmp
- imageaffine
- imageaffinematrixconcat
- imageaffinematrixget
- imagealphablending
- imageantialias
- imagearc
- imageavif
- imagebmp
- imagechar
- imagecharup
- imagecolorallocate
- imagecolorallocatealpha
- imagecolorat
- imagecolorclosest
- imagecolorclosestalpha
- imagecolorclosesthwb
- imagecolordeallocate
- imagecolorexact
- imagecolorexactalpha
- imagecolormatch
- imagecolorresolve
- imagecolorresolvealpha
- imagecolorset
- imagecolorsforindex
- imagecolorstotal
- imagecolortransparent
- imageconvolution
- imagecopy
- imagecopymerge
- imagecopymergegray
- imagecopyresampled
- imagecopyresized
- imagecreate
- imagecreatefromavif
- imagecreatefrombmp
- imagecreatefromgd2
- imagecreatefromgd2part
- imagecreatefromgd
- imagecreatefromgif
- imagecreatefromjpeg
- imagecreatefrompng
- imagecreatefromstring
- imagecreatefromtga
- imagecreatefromwbmp
- imagecreatefromwebp
- imagecreatefromxbm
- imagecreatefromxpm
- imagecreatetruecolor
- imagecrop
- imagecropauto
- imagedashedline
- imagedestroy
- imageellipse
- imagefill
- imagefilledarc
- imagefilledellipse
- imagefilledpolygon
- imagefilledrectangle
- imagefilltoborder
- imagefilter
- imageflip
- imagefontheight
- imagefontwidth
- imageftbbox
- imagefttext
- imagegammacorrect
- imagegd2
- imagegd
- imagegetclip
- imagegetinterpolation
- imagegif
- imagegrabscreen
- imagegrabwindow
- imageinterlace
- imageistruecolor
- imagejpeg
- imagelayereffect
- imageline
- imageloadfont
- imageopenpolygon
- imagepalettecopy
- imagepalettetotruecolor
- imagepng
- imagepolygon
- imagerectangle
- imageresolution
- imagerotate
- imagesavealpha
- imagescale
- imagesetbrush
- imagesetclip
- imagesetinterpolation
- imagesetpixel
- imagesetstyle
- imagesetthickness
- imagesettile
- imagestring
- imagestringup
- imagesx
- imagesy
- imagetruecolortopalette
- imagettfbbox
- imagettftext
- imagetypes
- imagewbmp
- imagewebp
- imagexbm
- iptcembed
- iptcparse
- jpeg2wbmp
- png2wbmp
Обработка изображений в PHP
Библиотека GD дает возможность работать с изображениями в PHP. Подробнее о функциях на php.net.
Далее представлены примеры как изменить размер, вырезать часть изображения и т.д. Все примеры универсальные и работают с разными типами файлов без изменений кода, у PNG файлов сохраняется прозрачность.
Открытие изображения
Итак, есть исходное изображение PNG 400x400px:
С помощью функции getimagesize() получим ширину, высоту и тип, далее откроем его функциями в зависимости от типа:
$filename = __DIR__ . '/donut.png'; $info = getimagesize($filename); $width = $info[0]; $height = $info[1]; $type = $info[2]; switch ($type)
Изменение размера изображения (resize)
Приведенный код уменьшает или увеличивает изображение не искажая его пропорции.
// Размеры новой фотки. $w = 200; $h = 0; if (empty($w)) < $w = ceil($h / ($height / $width)); >if (empty($h)) < $h = ceil($w / ($width / $height)); >$tmp = imageCreateTrueColor($w, $h); if ($type == 1 || $type == 3) < imagealphablending($tmp, true); imageSaveAlpha($tmp, true); $transparent = imagecolorallocatealpha($tmp, 0, 0, 0, 127); imagefill($tmp, 0, 0, $transparent); imagecolortransparent($tmp, $transparent); >$tw = ceil($h / ($height / $width)); $th = ceil($w / ($width / $height)); if ($tw < $w) < imageCopyResampled($tmp, $img, ceil(($w - $tw) / 2), 0, 0, 0, $tw, $h, $width, $height); >else < imageCopyResampled($tmp, $img, 0, ceil(($h - $th) / 2), 0, 0, $w, $th, $width, $height); >$img = $tmp;
Результат
$w = 200;
$h = 0;$w = 200;
$h = 100;$w = 100;
$h = 200;Обрезать изображение (crop)
Пример вырезает из исходного изображения часть размером $w на $h .
$x и $y задают начальные координаты в пикселях или процентах.$w = 200; $h = 200; $x = '100%'; $y = '100%'; if (strpos($x, '%') !== false) < $x = intval($x); $x = ceil(($width * $x / 100) - ($w / 100 * $x)); >if (strpos($y, '%') !== false) < $y = intval($y); $y = ceil(($height * $y / 100) - ($h / 100 * $y)); >$tmp = imageCreateTrueColor($w, $h); if ($type == 1 || $type == 3) < imagealphablending($tmp, true); imageSaveAlpha($tmp, true); $transparent = imagecolorallocatealpha($tmp, 0, 0, 0, 127); imagefill($tmp, 0, 0, $transparent); imagecolortransparent($tmp, $transparent); >imageCopyResampled($tmp, $img, 0, 0, $x, $y, $width, $height, $width, $height); $img = $tmp;
Результат
$x = 0;
$y = 0;$x = ‘50%’;
$y = ‘0%’;$x = ‘100%’;
$y = ‘0%’;Поворот изображения
Функция imagerotate() поворачивает изображение на заданный угол против часовой стрелки, отрицательный угол меняет направление поворота.
// Поворот против часовой стрелки на 45°. $transparent = imagecolorallocatealpha($img, 0, 0, 0, 127); $img = imagerotate($img, 45, $transparent); // Поворот по часовой стрелки на 90° $transparent = imagecolorallocatealpha($img, 0, 0, 0, 127); $img = imagerotate($img, -90, $transparent);
Поворот на не ровный угол увеличит ширину и высоту фото:
Зеркальное отражение
imageflip($img, IMG_FLIP_HORIZONTAL);
Imageflip() зеркалит изображение, могут быть следующие параметры:
IMG_FLIP_HORIZONTAL По горизонтали IMG_FLIP_VERTICAL По вертикали IMG_FLIP_BOTH По горизонтали и вертикали Добавление фона
Актуально для PNG с прозрачностью. Скрипт вставит на задний фон картинку с положением $x и $y . Размер основного изображения не изменится.
$file = __DIR__ . '/donut_bg.jpg'; // Положение фона. $x = '50%'; $y = '50%'; $info = getimagesize($file); switch ($info[2]) < case 1: $bg = imageCreateFromGif($file); break; case 2: $bg = imageCreateFromJpeg($file); break; case 3: $bg = imageCreateFromPng($file); break; >if (strpos($x, '%') !== false) < $x = intval($x); $x = ceil(($info[0] * $x / 100) - ($width / 100 * $x)); >if (strpos($y, '%') !== false) < $y = intval($y); $y = ceil(($info[1] * $y / 100) - ($height / 100 * $y)); >$tmp = imageCreateTrueColor($width, $height); imagecopy($tmp, $bg, 0, 0, $x, $y, $width, $height); imagedestroy($bg); imagecopy($tmp, $img, 0, 0, 0, 0, $width, $height); $img = $tmp;
Фильтры
imagefilter($img, $filtertype, $arg1, $arg2);
Функция imagefilter() применяет фильтр к изображению.
В параметре $filtertype указывается константа применяемого фильтра, а в следующих его настройки.IMG_FILTER_NEGATE
Инвертирует цвета изображения.
imagefilter($img, IMG_FILTER_NEGATE);
IMG_FILTER_GRAYSCALE
Преобразует цвета изображения в градации серого.
imagefilter($img, IMG_FILTER_GRAYSCALE);
IMG_FILTER_COLORIZE
Преобразует цвета изображения в градации заданного цвета в формате RGB.
// Красный imagefilter($img, IMG_FILTER_COLORIZE, 0, 240, 120); // Синий imagefilter($img, IMG_FILTER_COLORIZE, 150, 240, 120); // Зеленый imagefilter($img, IMG_FILTER_COLORIZE, 90, 240, 90);
0, 240, 120 150, 240, 120 90, 240, 90 IMG_FILTER_BRIGHTNESS
Изменяет яркость изображения, диапазон от -255 до 255.
imagefilter($img, IMG_FILTER_BRIGHTNESS, 127);
-200 -100 100 200 IMG_FILTER_CONTRAST
Изменяет контрастность изображения. Уровень может быть от -100 до 100.
imagefilter($img, IMG_FILTER_CONTRAST, 100);
-100 -50 50 100 IMG_FILTER_EDGEDETECT
Использует определение границ для их подсветки.
imagefilter($img, IMG_FILTER_EDGEDETECT);
IMG_FILTER_EMBOSS
imagefilter($img, IMG_FILTER_EMBOSS);
IMG_FILTER_GAUSSIAN_BLUR
Размывает изображение по методу Гаусса.
imagefilter($img, IMG_FILTER_GAUSSIAN_BLUR);
IMG_FILTER_SELECTIVE_BLUR
Как и IMG_FILTER_GAUSSIAN_BLUR размывает изображение.
imagefilter($img, IMG_FILTER_SELECTIVE_BLUR);
IMG_FILTER_MEAN_REMOVAL
imagefilter($img, IMG_FILTER_MEAN_REMOVAL);
IMG_FILTER_SMOOTH
Делает границы более плавными, а изображение менее четким. Диапазон значений не ограничен, но наиболее заметные изменения происходят от 0 до -8.
imagefilter($img, IMG_FILTER_SMOOTH, -2);
0 -2 -4 -6 IMG_FILTER_PIXELATE
Применяет эффект пикселирования.
arg1 – задает размера блока в пикселях.
arg2 – включает усовершенствованный эффект пикселирования.imagefilter($img, IMG_FILTER_PIXELATE, 2, true);
2 3 4 5 Сохранение
Вывод изображения в браузер
До вызова функции header() скрипт ничего не должен выводить ( echo , ?>.
switch ($type) < case 1: header('Content-Type: image/gif'); imageGif($img); break; case 2: header('Content-Type: image/jpeg'); imageJpeg($img, null, 100); break; case 3: header('Content-Type: image/x-png'); imagePng($img); break; >imagedestroy($img); exit();
Чтобы браузер отдал фото на скачивание, в начало кода нужно добавить заголовок:
header('Content-Disposition: Attachment;filename=' . basename($src));
Сохранение изображения в файл на сервере
switch ($type) < case 1: imageGif($img, $src); break; case 2: imageJpeg($img, $src, 100); break; case 3: imagePng($img, $src); break; >imagedestroy($img);
Вывод в браузер и сохранение в файл
switch ($type) < case 1: header('Content-Type: image/gif'); imageGif($img, $src); break; case 2: header('Content-Type: image/jpeg'); imageJpeg($img, $src, 100); break; case 3: header('Content-Type: image/x-png'); imagePng($img, $src); break; >imagedestroy($img); readfile($src); exit();