Загрузка обрезка изображения php

Подскажите скрипт для обрезки изображения автоматом (при загрузке страницы)?

Пример — есть картинка 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.

Читайте также:  Php function parse html

Источник

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 );
?>

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

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();

    Источник

Оцените статью