Привет, Гость!
Главная
Вход
Библиотека | Полезные статьи

PHP GD 2x ресайз

Теги:php | gd
Кто добавил:B@ka (08.06.2009 / 11:53)
Рейтинг:rating 76 article (1)
Число прочтений:9000
Комментарии:Комментарии закрыты
Задача:
1. Взять изображение N-размера.
2. Cоздать к большому изображение маленькую пропорциональную превьюшку.
3. Наложить на большое изображение(изначального размера), логотип формата PNG 24bit
4. Сохранить 2 изображения в формате JPEG: 1. SMALL(100x100) 2. BIG(STANDART SIZE)+LOGO


Начнём:
Сразу определимся надо-ли нам это... =) надо? отлично! поехали.


Нам потребуется: большая картинка(на ваш вкус и цвет), логотип или что-то подобное в формате PNG 24bit, Редактор и минимально терпения =).

Открываем редактор, если вы пользуетесь блокнотом(NotePad) мне вас искренне жаль =\
Начнём разжёвывать =):$filename = "";
$filename_logo = "";


$filename - Путь до картинки, которую мы собственно будем клонировать и уменьшать.
$filename_logo - Путь до логотипа, который мы собераемся накладывать на большое изображение.// header('Content-type: image/jpeg');


Эта строчка нам врятли понадобится, а в некоторых вещах может даже помешать, но если мы хотим вывести изображение на экран, то без неё необойтись. Она оповещает брауз о выводе изображения на эекран и не более чего лишнего...$info_img = getimagesize($filename);


В переменную $info_img засовываем функцию GetImageSize() которая определяет информацию касательно нашего изображения и засовывает всю информацию в массив по ячейкам [0],[1],[2] и .....т.д.. В данном случае нас интересует только 2 ячейки [0] и [1], ячейка [0] - хранит данные о ширине изображения а ячейка [1] - хранит информацию о высоте изображения.list($width, $height) = $info_img;


Дабы нам было удобней определяться в ячейках ширины и высоты, с помощью функции list() мы распредилим $info_img[0] на $width, а info_img[1] на $height.$small_size = 100;


Создаём переменную в которой будем хранить данные о размерах будущей превьюшки в пиксилях.if($width > $height) {
$s_width = $small_size;
$s_height = $small_size*($height/$width);
}
if($width < $height) {
$s_width = $small_size*($width/$height);
$s_height = $small_size;
}
if($width == $height) {
$s_width = $small_size;
$s_height = $small_size;
}


Подошли к более интересному содержанию кода... Вопервых нам надо определить что у нашего изображения больше высота или ширина и следовательно выдать разные значения для представленный переменных(Что-бы получившиеся превьюшка была пропорциональна), а именно для:
$s_width - переменная с данными ширины маленького изображения(SMALL);
$s_height - переменная с данными высоты маленького изображения(SMALL);$small_image = imagecreatetruecolor($s_width, $s_height);
$big_image = imagecreatetruecolor($width, $height);


Этими строчками мы создаём 2 новых изображения:
$small_image - маленькое изображение(превьюшка) размеры которого не превышают 100x100;
$big_image - большое изображение, изначального размера;if($info_img['mime'] == 'image/gif') {
$image = imagecreatefromgif($filename);
}
if($info_img['mime'] == 'image/jpeg') {
$image = imagecreatefromjpeg($filename);
}
if($info_img['mime'] == 'image/png') {
$image = imagecreatefrompng($filename);
}


В этих строчках кода, нам надо опредилить тип загруженного нами файла, в данном случае это может быть JPG/JPEG,GIF,PNG;imagecopyresampled($small_image, $image, 0, 0, 0, 0, $s_width, $s_height, $width, $height);
imagecopyresampled($big_image, $image, 0, 0, 0, 0, $width, $height, $width, $height);


В этой части кода мы уменьшаем одну копию изображения до пределов 100x100(px)
2ю оставляем неизменнойimagealphablending($image, true);
$logo_image = imagecreatefrompng($filename_logo);
$logo_width = ImageSX($logo_image);
$logo_height = ImageSY($logo_image);
imagecopy($big_image, $logo_image, $width-($logo_width+10), $height-($logo_height+10), 0, 0, $logo_width, $logo_height);


Осталась самая малость, нам надо наложить на большую картинку($big_image) наш прозрачных логотип PNG.
функция ImageAlphaBlending() даёт возможность делать наложение прозрачных изображений...
$logo_image - с помощью функции ImageCreateFromPNG создаём изображение с логотипом.
В переменные $logo_width и $logo_height с помощью функций ImageSX(размер по X - ширина) и ImageSY(размер по Y - высота), пихаем данные относительно размеров логотипа...
С помощью функции ImageCopy() мы накладываем изображение логотипа на большое изображение, в правый нижний угол.imagejpeg($small_image, "picture/small_picture.jpg";, 80);
imagejpeg($big_image, "picture/big_picture.jpg", 80);



Вот уже и конец близок... Сохранение двух картинок: 1. Маленькая превьюшка 100x100 2. Картинка изначального размера но с логотипом в правом нижнем углу.
Немного ближе расмотрим строчку "imagejpeg($image, "picture.jpg", 80)":
Сама функция ImageJpeg() - выдаёт окончательное изображение в формате JPEG/JPG
$image - Это изображение которое выводится на экран или сохроняется.
"picture.jpg" - путь и имя картинки куда мы хотим осуществить сохранение изображения.
80 - это качество выходящего изображение JPEG базируеться от 1 до 100.
Вот собственно и всё.... =) На всякий пожарный, если вам искренне впадлу читать мои утомительные описания, вот вам готовый листинг кода:

<?php
$filename = ""; // путь до картинки
$filename_logo = ""; // путь до логотипа PNG
$small_size = 100; // максимальный размер превьюшки

$info_img = getimagesize($filename); // собераем информацию изображения
list($width, $height) = $info_img;

// определяем пропорции
if($width > $height) {
$s_width = $small_size;
$s_height = $small_size*($height/$width);
}
if($width < $height) {
$s_width = $small_size*($width/$height);
$s_height = $small_size;
}
if($width == $height) {
$s_width = $small_size;
$s_height = $small_size;
}

$small_image = imagecreatetruecolor($s_width, $s_height);
$big_image = imagecreatetruecolor($width, $height);


// определяем тип изображения
if($info_img['mime'] == 'image/gif') {
$image = imagecreatefromgif($filename);
}
if($info_img['mime'] == 'image/jpeg') {
$image = imagecreatefromjpeg($filename);
}
if($info_img['mime'] == 'image/png') {
$image = imagecreatefrompng($filename);
}

imagecopyresampled($small_image, $image, 0, 0, 0, 0, $s_width, $s_height, $width, $height);
imagecopyresampled($big_image, $image, 0, 0, 0, 0, $width, $height, $width, $height);

// накладываем лого на большое изображение
imagealphablending($image, true);
$logo_image = imagecreatefrompng($filename_logo);
$logo_width = ImageSX($logo_image);
$logo_height = ImageSY($logo_image);
imagecopy($big_image, $logo_image, $width-($logo_width+10), $height-($logo_height+10), 0, 0, $logo_width, $logo_height);

// сохраняем 2 изображения
imagejpeg($small_image, "picture/small_picture.jpg", 80);
imagejpeg($big_image, "picture/big_picture.jpg", 80);
?>
Скачать файл txt | fb2
Главная
0 / 86

JohnCMS 7.1.0

Яндекс.Метрика
© JohnCMS