<?xml version="1.0" encoding="utf-8"?>
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink">
<stylesheet type="text/css">
.body{font-family : Verdana, Geneva, Arial, Helvetica, sans-serif;
}
.p{margin:0.5em 0 0 0.3em; padding:0.2em; text-align:justify;
}
</stylesheet>
<description>
<title-info>
<genre>sf_history</genre>
<author>
<first-name>Имя автора</first-name>
<last-name>Фамилия автора</last-name>
</author>
<book-title>Название книги</book-title>
<annotation></annotation>
<date>Дата</date>
<lang>ru</lang>
</title-info>
<document-info>
<author><nickname></nickname>
</author>
<program-used>Lib converter jcms</program-used>
<date value=""></date>
<src-url>http://johncms.com</src-url>
<id></id>
<version>1.0</version>
<history><p>book</p></history>
</document-info>
</description>
<body>
<title><p>PHP GD 2x ресайз</p>
</title>
<section><p>Задача: </p>
<p>1. Взять изображение N-размера.</p>
<p>2. Cоздать к большому изображение маленькую пропорциональную превьюшку.</p>
<p>3. Наложить на большое изображение(изначального размера), логотип формата PNG 24bit</p>
<p>4. Сохранить 2 изображения в формате JPEG: 1. SMALL(100x100) 2. BIG(STANDART SIZE)+LOGO</p>
<p></p>
<p>Начнём:</p>
<p> Сразу определимся надо-ли нам это... =) надо? отлично! поехали.</p>
<p></p>
<p></p>
<p>Нам потребуется: большая картинка(на ваш вкус и цвет), логотип или что-то подобное в формате PNG 24bit, Редактор и минимально терпения =).</p>
<p></p>
<p>Открываем редактор, если вы пользуетесь блокнотом(NotePad) мне вас искренне жаль =\</p>
<p>Начнём разжёвывать =):$filename = "";</p>
<p>$filename_logo = "";</p>
<p></p>
<p></p>
<p>$filename - Путь до картинки, которую мы собственно будем клонировать и уменьшать.</p>
<p>$filename_logo - Путь до логотипа, который мы собераемся накладывать на большое изображение.// header('Content-type: image/jpeg');</p>
<p></p>
<p></p>
<p>Эта строчка нам врятли понадобится, а в некоторых вещах может даже помешать, но если мы хотим вывести изображение на экран, то без неё необойтись. Она оповещает брауз о выводе изображения на эекран и не более чего лишнего...$info_img = getimagesize($filename);</p>
<p></p>
<p></p>
<p>В переменную $info_img засовываем функцию GetImageSize() которая определяет информацию касательно нашего изображения и засовывает всю информацию в массив по ячейкам [0],[1],[2] и .....т.д.. В данном случае нас интересует только 2 ячейки [0] и [1], ячейка [0] - хранит данные о ширине изображения а ячейка [1] - хранит информацию о высоте изображения.list($width, $height) = $info_img;</p>
<p></p>
<p></p>
<p>Дабы нам было удобней определяться в ячейках ширины и высоты, с помощью функции list() мы распредилим $info_img[0] на $width, а info_img[1] на $height.$small_size = 100;</p>
<p></p>
<p></p>
<p>Создаём переменную в которой будем хранить данные о размерах будущей превьюшки в пиксилях.if($width > $height) {</p>
<p>$s_width = $small_size;</p>
<p>$s_height = $small_size*($height/$width);</p>
<p>}</p>
<p>if($width < $height) {</p>
<p>$s_width = $small_size*($width/$height);</p>
<p>$s_height = $small_size;</p>
<p>}</p>
<p>if($width == $height) {</p>
<p>$s_width = $small_size;</p>
<p>$s_height = $small_size;</p>
<p>}</p>
<p></p>
<p></p>
<p>Подошли к более интересному содержанию кода... Вопервых нам надо определить что у нашего изображения больше высота или ширина и следовательно выдать разные значения для представленный переменных(Что-бы получившиеся превьюшка была пропорциональна), а именно для: </p>
<p>$s_width - переменная с данными ширины маленького изображения(SMALL);</p>
<p>$s_height - переменная с данными высоты маленького изображения(SMALL);$small_image = imagecreatetruecolor($s_width, $s_height);</p>
<p>$big_image = imagecreatetruecolor($width, $height);</p>
<p></p>
<p></p>
<p>Этими строчками мы создаём 2 новых изображения:</p>
<p>$small_image - маленькое изображение(превьюшка) размеры которого не превышают 100x100;</p>
<p>$big_image - большое изображение, изначального размера;if($info_img['mime'] == 'image/gif') {</p>
<p>$image = imagecreatefromgif($filename);</p>
<p>}</p>
<p>if($info_img['mime'] == 'image/jpeg') {</p>
<p>$image = imagecreatefromjpeg($filename);</p>
<p>}</p>
<p>if($info_img['mime'] == 'image/png') {</p>
<p>$image = imagecreatefrompng($filename);</p>
<p>}</p>
<p></p>
<p></p>
<p>В этих строчках кода, нам надо опредилить тип загруженного нами файла, в данном случае это может быть JPG/JPEG,GIF,PNG;imagecopyresampled($small_image, $image, 0, 0, 0, 0, $s_width, $s_height, $width, $height);</p>
<p>imagecopyresampled($big_image, $image, 0, 0, 0, 0, $width, $height, $width, $height);</p>
<p></p>
<p></p>
<p>В этой части кода мы уменьшаем одну копию изображения до пределов 100x100(px)</p>
<p>2ю оставляем неизменнойimagealphablending($image, true);</p>
<p>$logo_image = imagecreatefrompng($filename_logo);</p>
<p>$logo_width = ImageSX($logo_image);</p>
<p>$logo_height = ImageSY($logo_image);</p>
<p>imagecopy($big_image, $logo_image, $width-($logo_width+10), $height-($logo_height+10), 0, 0, $logo_width, $logo_height);</p>
<p></p>
<p></p>
<p>Осталась самая малость, нам надо наложить на большую картинку($big_image) наш прозрачных логотип PNG.</p>
<p>функция ImageAlphaBlending() даёт возможность делать наложение прозрачных изображений...</p>
<p>$logo_image - с помощью функции ImageCreateFromPNG создаём изображение с логотипом.</p>
<p>В переменные $logo_width и $logo_height с помощью функций ImageSX(размер по X - ширина) и ImageSY(размер по Y - высота), пихаем данные относительно размеров логотипа...</p>
<p>С помощью функции ImageCopy() мы накладываем изображение логотипа на большое изображение, в правый нижний угол.imagejpeg($small_image, "picture/small_picture.jpg";, 80);</p>
<p>imagejpeg($big_image, "picture/big_picture.jpg", 80);</p>
<p></p>
<p></p>
<p></p>
<p>Вот уже и конец близок... Сохранение двух картинок: 1. Маленькая превьюшка 100x100 2. Картинка изначального размера но с логотипом в правом нижнем углу.</p>
<p>Немного ближе расмотрим строчку  "imagejpeg($image, "picture.jpg", 80)":</p>
<p>Сама функция ImageJpeg() - выдаёт окончательное изображение в формате JPEG/JPG</p>
<p>$image - Это изображение которое выводится на экран или сохроняется.</p>
<p>"picture.jpg" - путь и имя картинки куда мы хотим осуществить сохранение изображения.</p>
<p>80 - это качество выходящего изображение JPEG базируеться от 1 до 100.</p>
<p>Вот собственно и всё.... =) На всякий пожарный, если вам искренне впадлу читать мои утомительные описания, вот вам готовый листинг кода:</p>
<p></p>
<p> <?php </p>
<p>$filename = ""; // путь до картинки </p>
<p>$filename_logo = ""; // путь до логотипа PNG </p>
<p>$small_size = 100; // максимальный размер превьюшки </p>
<p></p>
<p>$info_img = getimagesize($filename); // собераем информацию изображения </p>
<p>list($width, $height) = $info_img; </p>
<p></p>
<p>// определяем пропорции </p>
<p>if($width > $height) { </p>
<p>$s_width = $small_size; </p>
<p>$s_height = $small_size*($height/$width); </p>
<p>} </p>
<p>if($width < $height) { </p>
<p>$s_width = $small_size*($width/$height); </p>
<p>$s_height = $small_size; </p>
<p>} </p>
<p>if($width == $height) { </p>
<p>$s_width = $small_size; </p>
<p>$s_height = $small_size; </p>
<p>} </p>
<p></p>
<p>$small_image = imagecreatetruecolor($s_width, $s_height); </p>
<p>$big_image = imagecreatetruecolor($width, $height); </p>
<p></p>
<p></p>
<p>// определяем тип изображения  </p>
<p>if($info_img['mime'] == 'image/gif') { </p>
<p>$image = imagecreatefromgif($filename); </p>
<p>} </p>
<p>if($info_img['mime'] == 'image/jpeg') { </p>
<p>$image = imagecreatefromjpeg($filename); </p>
<p>} </p>
<p>if($info_img['mime'] == 'image/png') { </p>
<p>$image = imagecreatefrompng($filename); </p>
<p>} </p>
<p></p>
<p>imagecopyresampled($small_image, $image, 0, 0, 0, 0, $s_width, $s_height, $width, $height); </p>
<p>imagecopyresampled($big_image, $image, 0, 0, 0, 0, $width, $height, $width, $height); </p>
<p></p>
<p>// накладываем лого на большое изображение </p>
<p>imagealphablending($image, true);  </p>
<p>$logo_image = imagecreatefrompng($filename_logo);  </p>
<p>$logo_width = ImageSX($logo_image);  </p>
<p>$logo_height = ImageSY($logo_image);  </p>
<p>imagecopy($big_image, $logo_image, $width-($logo_width+10), $height-($logo_height+10), 0, 0, $logo_width, $logo_height);  </p>
<p></p>
<p>// сохраняем 2 изображения </p>
<p>imagejpeg($small_image, "picture/small_picture.jpg", 80); </p>
<p>imagejpeg($big_image, "picture/big_picture.jpg", 80);  </p>
<p>?></p>
</section>
</body>
</FictionBook>