Ресайзер изображений PHP

Дата: Июнь 25, 2009

(2) комментариев

Очень часто возникает необходимость изменить размеры избражения, при чём не только изменить но ещё и обрезать под квадратик или наложить водяные знаки. Именно данная задача сподвигла меня написать простенький ресайзер картинок. Для ресайза я буду использовать встроенную функцию php imagecopyresized. Все коментарии оставляю в коде скрипта

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php

// f - имя файла
// type - способ масштабирования
// q - качество сжатия
// src - исходное изображение
// dest - результирующее изображение
// w - ширниа изображения
// ratio - коэффициент пропорциональности

$_GET['type'] = $_GET['type'];
// тип преобразования, если не указаны размеры
if ($_GET['type'] == 0) $w = 70;  // квадратная 70x70
if ($_GET['type'] == 1) $w = 300;  // квадратная 300х300
if ($_GET['type'] == 2) $w = 120; // пропорциональная шириной


// качество jpeg по умолчанию
$q = 100;
// создаём исходное изображение на основе
// исходного файла и опеределяем его размеры
$src=imagecreatefromjpeg($_GET['f']);
$w_src = imagesx($src);
$h_src = imagesy($src);
header("Content-type: image/jpeg");
// если размер исходного изображения
// отличается от требуемого размера
if ($w_src != 0)  //$w
{
// операции для получения прямоугольного файла
   if ($_GET['type']==2||$_GET['type']==1)
   {
       // вычисление пропорций
       $ratio = $w_src/$w;
       $w_dest = round($w_src/$ratio);
       $h_dest = round($h_src/$ratio);

       // создаём пустую картинку
       // важно именно truecolor!, иначе будем иметь 8-битный результат
       $dest = imagecreatetruecolor($w_dest,$h_dest);
       $str = "";
       imagecopyresized($dest,$src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src);

    }
   // операции для получения квадратного файла
    if ($_GET['type']==0)
    {
         // создаём пустую квадратную картинку
         // важно именно truecolor!, иначе будем иметь 8-битный результат
         $dest = imagecreatetruecolor($w,$w);

         // вырезаем квадратную серединку по x, если фото горизонтальное
         if ($w_src>$h_src)
         imagecopyresized($dest, $src, 0, 0,
                          round((max($w_src,$h_src)-min($w_src,$

Использовать данный скрипт можно следующим образом
Ложим скрипт в корень сайта

1
<img src="/resizer.php?type=2&f=./path/to/img.jpg" />

В данном случае скрипт обрадотает картинку (/path/to/img.jpg) без обрезания до квадратика и уемньшит пропорционально по ширине до 120 тикселей

a




    2 комментариев на "Ресайзер изображений PHP"

    Inviseble_Demon сказал:
    20.02.2010

    Отлично. Почти то что я искал.. )

    Не сочтите за дерзость но код работает только с jpg…

    $ext = explode(«.», $src);
    $ext = end($ext);
    $ext = strtolower($ext);

    if ($ext == «jpg») { $src = imagecreatefromjpeg($src); }
    else if ($ext == «gif») { $src = imagecreatefromgif ($src); }
    else if ($ext == «png») { $src = imagecreatefrompng ($src); }

    Ну и при выводе

    if ($ext == «jpg») { $src = imagejpeg($dest, NULL, $q); }
    else if ($ext == «gif») { $src = imagegif ($dest, NULL, $q); }
    else if ($ext == «png») { $src = imagepng ($dest, NULL, $q); }

    Вот так все 3 разом..
    А по существу спасибо я когда решил сам писать рукой махнул при вспоминании того что нужно расчеты делать )) лень матушка мать её…

    Жэка сказал:
    03.06.2010

    А я позволю себе предложить заменить imagecopyresized на imagecopyresampled, это даст нам необходимый антиалиасинг при уменьшении изображений, чего не дает авторский вариант.
    И еще добавлю 5 коп к коментарию Inviseble_Demon. Вывод целесообразно осуществлять только jpg, т.к. заресайзеные gif и png теряют все свои качества(не знаю как насчет альфа-канала png, но gif точно больше не покажет анимацию), к тому же к jpg можно применить сжатие, что уменьшит трафик

    Продолжение дискуссии на форуме: link


    Вы можете продолжить обсуждение этой статьи на форуме


    Имя : 
    Почта : 
    Сайт : 
    Комментарий : 

    Проверка комментариев включена. Прежде чем Ваши комментарии будут опубликованы пройдет какое-то время.

    Создание сайта - Echo-group Раскрутка сайтов