Уменьшение изображения на PHP


Для заметки. Если вам нужно уменьшить картинку или фотографию в php, то в этом поможет встроенная библиотека для работы с изображениями – GD, "php_gd2".

Для ее включения достаточно в php.ini убрать комментарий в виде «;» перед extension=php_gd2.dll и перезагрузить веб-сервер.
Функция может уменьшать изображения таких форматов: jpg, gif, png и bmp.

Ну, и самое главное - это пример:

<?php

function resize ($filename, $size)
{
$pref = 'mini_';
$img = strtolower(strrchr(basename($filename), "."));
$imgname = basename($filename);
$formats = array('.jpg', '.gif', '.png', '.bmp');
if (in_array($img, $formats))
{
list($width, $height) = getimagesize($filename);
$new_height = $height * $size;
$new_width = $new_height / $width;
$thumb = imagecreatetruecolor($size, $new_width);
switch ($img)
{
case '.jpg': $source = @imagecreatefromjpeg($filename); break;
case '.gif': $source = @imagecreatefromgif($filename); break;
case '.png': $source = @imagecreatefrompng($filename); break;
case '.bmp': $source = @imagecreatefromwbmp($filename); break;
}
imagecopyresized($thumb, $source, 0, 0, 0, 0, $size, $new_width, $width, $height);
switch ($img)
{
case '.jpg': imagejpeg($thumb, $pref.$imgname); break;
case '.gif': imagegif($thumb, $pref.$imgname); break;
case '.png': imagepng($thumb, $pref.$imgname); break;
case '.bmp': imagewbmp($thumb, $pref.$imgname); break;
}
}
else return 'Error';
@imagedestroy($thumb);
@imagedestroy($source);
return $imgname;
}

echo '<img src="mini_'.resize('http://www.webnotes.com.ua/demo/img-resize/test.jpg',200).'" />';

?>

В строке 35 выводим изображение, где в пути источника «src» вызываем функцию resize с двумя параметрами: полным путем к картинке и шириной выходного изображения.

В результате работы функции будет создано сжатое изображение с именем mini_test.jpg, и функция вернет имя входящего изображения - test.jpg. Вот для этого мы и подставляем префикс «mini_» в «src». Конечно, можно было бы и в функцию подставить префикс и возвратить новое имя файла, но мне так было удобней.

Рассматривать полностью функцию я не буду, так как там нет ничего сложного и в интернете похожего хватает.

Рабочий пример: уменьшения картинки на php.

Удачи!

, , ,

1 Star2 Stars3 Stars4 Stars5 Stars (голосов 7, в среднем: 4.71 из 5)
Loading ... Loading ...


  1. #1 D1MyJI9 - Сентябрь 24th, 2009 at 15:18

    Все хорошо, но не совсем понятно, от куда будут браться данные картинки…

  2. #2 nice - Сентябрь 24th, 2009 at 16:08

    Чем не подходит “В строке 35 выводим изображение, где в пути источника «src» вызываем функцию resize с двумя параметрами: полным путем к картинке и шириной выходного изображения” ?

  3. #3 Иван - Март 14th, 2011 at 17:12

    Я для работы с изображениями советую использовать class.upload.php. Очень мощная библиотека! Всем советую!

  4. #4 xDroid - Декабрь 8th, 2011 at 22:11

    $tmp_name – полное имя файла картинки которую нужно обрезать
    $new_name – полное имя нового файла, но без расширения, оно допишеться автоматом
    $resolution_width – максимум по ширине (пиксели)
    $resolution_height – максимум по высоте (пиксели)
    $max_size максимальный размер обрабатывеамой фотки

    скрипт с моей CMS [url="http://xdroid.org.ua/"]CMS xDroid[/url]

    [code]//создаём функцию для уменьшения изображений-------------------------------------------------------------------------------------------------------------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    function images_size($tmp_name, $new_name, $resolution_width, $resolution_height, $max_size){

    //проверяем размер файла
    $image_size = filesize($tmp_name);
    $image_size = floor($image_size / '1048576') ;
    if($image_size $resolution_width || $params['1'] > $resolution_height) {
    //пишем фото --------->
    //получаем нужные переменные
    switch ($params['2']) {
    case 1: $old_img = imagecreatefromgif($tmp_name); break;
    case 2: $old_img = imagecreatefromjpeg($tmp_name); break;
    case 3: $old_img = imagecreatefrompng($tmp_name); break;
    case 6: $old_img = imagecreatefromwbmp($tmp_name); break;
    }
    //вычисляем новые размеры
    if($params['0'] > $params['1']) {
    $size = $params['0'] ;
    $resolution = $resolution_width;
    }
    else {
    $size = $params['1'] ;
    $resolution = $resolution_width * $params['1'] / $params['0'];
    }
    $new_width = floor($params['0'] * $resolution / $size) ;
    $new_height = floor($params['1'] * $resolution / $size) ;
    //создаём новое изображение
    $new_img = imagecreatetruecolor($new_width, $new_height) ;
    imagecopyresampled ($new_img, $old_img, 0, 0, 0, 0, $new_width, $new_height, $params['0'], $params['1']) ;

    //сохраняем новое изображение----->>>>>>
    //определяем тип изображения
    switch ($params['2']) {
    case 1: $type = '.gif'; break;
    case 2: $type = '.jpg'; break;
    case 3: $type = '.png'; break;
    case 6: $type = '.bmp'; break;
    }
    //Сохраняем
    $new_name = "$new_name$type" ;
    switch ($type) {
    case '.gif': imagegif($new_img, $new_name); break;
    case '.jpg': imagejpeg($new_img, $new_name, 100); break;
    case '.bmp': imagejpeg($new_img, $new_name, 100); break;
    case '.png': imagepng($new_img, $new_name); break;
    }
    $message = ('Изображение добавлено') ;
    }

    //если не нужно обрезать-------------------->>>>>>>>>>>>>>>>>>>>>>>
    else {
    //сохраняем новое изображение----->>>>>>
    //определяем тип изображения
    switch ($params['2']) {
    case 1: $type = '.gif'; break;
    case 2: $type = '.jpg'; break;
    case 3: $type = '.png'; break;
    case 6: $type = '.bmp'; break;
    }
    //Сохраняем
    $new_name = "$new_name$type" ;
    copy($tmp_name, $new_name);
    $message = ('Изображение добавлено') ;
    }
    }
    else $errors = ('Слишком большой размер') ;

    return($message);
    return($errors);
    }
    //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<-------------------------------------------------------------------------------------------------------[/code]

(will not be published)

Spam Protection by WP-SpamFree Plugin

  1. No trackbacks.