Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 11.06.2011, 21:42   #1
Заблокирован
 Разведчик
Аватар для Я убью:Frost:DD
 
Я убью:Frost:DD на правильном пути
Регистрация: 06.06.2011
Сообщений: 20
Популярность: 74
Сказал(а) спасибо: 65
Поблагодарили 32 раз(а) в 22 сообщениях
 
Arrow Динамическое создание миниатюр изображений с помощью PHP

В данном уроке мы разберемся, как автоматически создавать миниатюры для изображений. При создании различных проектов генерирование миниатюр является достаточно скучной, долгой и утомительной процедурой, даже при использовании различных средств для пакетной обработки изображений. Почему бы не переложить эту тупую, но нужную работу на скрипт?


Код

Мы будем использовать PHP для динамического создания миниатюр изображений. В скрипте будут обрабатываться изображения основных форматов: png, jpg, gif.

Укажем нужный размер миниатюры.1 $nw = 150; // Ширина миниатюр
2 $nh = 100; // Высота миниатюр


Теперь укажем скрипту исходный файл и файл с результатом работы.1 $source = "images/test/test.jpg"; // Исходный файл
2 $dest = "images/test/thumb/test.jpg"; // Файл с результатом работы


Следующая часть кода будет автоматически отделять расширение файла. Мы используем функцию PHP explode для разделения имени файла на части между точками, а затем используем функцию count для определения последней части исходной строки, которая является расширением файла.1 $stype = explode(".", $source);
2 $stype = $stype[count($stype)-1];


Затем получаем размер оригинального изображения.1 $size = getimagesize($source);
2 $w = $size[0]; // Ширина изображения
3 $h = $size[1]; // Высота изображения


Затем используем нужную функцию PHP для работы с определенным форматом изображения:01 switch($stype) {
02 case 'gif':
03 $simg = imagecreatefromgif($source);
04 break;
05 case 'jpg':
06 $simg = imagecreatefromjpeg($source);
07 break;
08 case 'png':
09 $simg = imagecreatefrompng($source);
10 break;
11 }


И, наконец, создаем миниатюру и помещаем ее в указанную папку. 01 $dimg = imagecreatetruecolor($nw, $nh);
02 $wm = $w/$nw;
03 $hm = $h/$nh;
04 $h_height = $nh/2;
05 $w_height = $nw/2;
06
07 if($w > $h) {
08 $adjusted_width = $w / $hm;
09 $half_width = $adjusted_width / 2;
10 $int_width = $half_width - $w_height;
11 imagecopyresampled($dimg,$simg,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h);
12 } elseif(($w < $h) || ($w == $h)) {
13 $adjusted_height = $h / $wm;
14 $half_height = $adjusted_height / 2;
15 $int_height = $half_height - $h_height;
16 imagecopyresampled($dimg,$simg,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h);
17 } else {
18 imagecopyresampled($dimg,$simg,0,0,0,0,$nw,$nh,$w, $h);
19 }
20 imagejpeg($dimg,$dest,100);


В результате выполнения скрипта мы получим готовую миниатюру в указанном файле.


Вариант скрипта

Представленный ниже скрипт находит все изображения в указанной папке и создает миниатюры для них, помещая в нужный каталог.
view source

print
?01 $thumb_directory = "images/thumb"; //Папка для миниатюр
02 $orig_directory = "images/full"; //Папка для полноразмерных изображений
03
04 $dir_handle = @opendir($orig_directory); //Открываем папку с полноразмерными изображениями
05 if ($dir_handle > 1){ //Проверяем, что папка открыта и в ней есть файлы
06
07 $allowed_types=array('jpg','jpeg','gif','png'); // Список обрабатываемых расширений
08 $file_parts=array();
09 $ext='';
10 $title='';
11 $i=0;
12
13 while ($file = @readdir($dir_handle))
14 {
15 /* Пропускаем системные файлы: */
16 if($file=='.' || $file == '..') continue;
17
18 $file_parts = explode('.',$file); //Разделяем имя файла на части
19 $ext = strtolower(array_pop($file_parts));
20
21 /* Используем имя файла (без расширения) как заголовок изображения: */
22 $title = implode('.',$file_parts);
23 $title = htmlspecialchars($title);
24
25 /* Если расширение входит в список обрабатываемых: */
26 if(in_array($ext,$allowed_types))
27 {
28
29 /* Если вы планируете хранить изображения в базе данных, вставьте код для запроса здесь */
30
31 /* Далее следует код, который разбирался в уроке */
32 /* Выводим каждое изображение: */
33
34 $nw = 150;
35 $nh = 100;
36 $source = $orig_directory . $file;
37 $stype = explode(".", $source);
38 $stype = $stype[count($stype)-1];
39 $dest = $thumb_directory . $file;
40
41 $size = getimagesize($source);
42 $w = $size[0];
43 $h = $size[1];
44
45 switch($stype) {
46 case 'gif':
47 $simg = imagecreatefromgif($source);
48 break;
49 case 'jpg':
50 $simg = imagecreatefromjpeg($source);
51 break;
52 case 'png':
53 $simg = imagecreatefrompng($source);
54 break;
55 }
56
57 $dimg = imagecreatetruecolor($nw, $nh);
58 $wm = $w/$nw;
59 $hm = $h/$nh;
60 $h_height = $nh/2;
61 $w_height = $nw/2;
62
63 if($w> $h) {
64 $adjusted_width = $w / $hm;
65 $half_width = $adjusted_width / 2;
66 $int_width = $half_width - $w_height;
67 imagecopyresampled($dimg,$simg,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h);
68 } elseif(($w <$h) || ($w == $h)) {
69 $adjusted_height = $h / $wm;
70 $half_height = $adjusted_height / 2;
71 $int_height = $half_height - $h_height;
72
73 imagecopyresampled($dimg,$simg,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h);
74 } else {
75 imagecopyresampled($dimg,$simg,0,0,0,0,$nw,$nh,$w, $h);
76 }
77 imagejpeg($dimg,$dest,100);
78 }
79 }
80
81 /* Закрываем папку */
82 @closedir($dir_handle);
83
84 }
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
ПодпольщикPB (12.06.2011), ololoshnik212 (11.06.2011)
Ответ

Метки
ыыыыыыыыы


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Информация] Хостинг изображений от Zhyk.Ru Zhyk Новости 1 09.10.2016 19:41
[Обсуждение] Хостинг изображений от Zhyk.Ru Zhyk О портале Zhyk.Ru 21 13.01.2013 17:05
Создание 2ух стопок на ПТС (с помощью фейка) Федя Подполье Lineage 2 (0 уровень) 9 12.07.2010 21:52
[Руководство] Создание сервера CS с динамическим IP AsPin Counter-Strike 0 30.05.2010 21:56

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 15:59.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net