Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2016, 22:21   #1
icemanius
Новичок
Джуниор
 
Регистрация: 28.08.2016
Сообщений: 1
По умолчанию создание миниатюр php

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

$thumb_directory = "images/thumb/"; //Папка для миниатюр
02 $orig_directory = "images/"; //Папка для полноразмерных изображений
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,$n h,$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_heigh t,$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 }


?>
icemanius вне форума Ответить с цитированием
Старый 07.09.2016, 17:33   #2
x64
Пользователь
 
Регистрация: 15.11.2012
Сообщений: 13
По умолчанию

В подобных случаях помогает взять листок и нарисовать несколько прямоугольников, характеризующих «область вписывания» (максимальная длина/ширина изображения) и разные соотношения обрабатываемого изображения.
В общем случае, вычисляем коэффициенты отношения для ширины и высоты между изображением и областью вписывания. Далее смотрим, какой коэффициент больше, в зависимости от этого пропорционально масштабируется высота или ширина. Немного кода:
PHP код:
$dst_w 200# ширина нового изображения
$dst_h 100# высота нового изображения
$src_w $w;  # ширина исходной картинки
$src_h $h;  # высота исходной картинки

$kw $src_w $dst_w# коэффициент ширины
$kh $src_h $dst_h# коэффициент высоты

if ($kw != $kh) { # если равны, значит изображение уже нужных пропорций
    # в зависимости от соотношение вторая сторона уменьшается пропорционально ширине или высоте
    
if ($kw $kh) {
        
$dst_w round($src_w $kh);
    } else {
        
$dst_h round($src_h $kw);
    }
}

# создать новую область
$dst_img imagecreatetruecolor($dst_w$dst_h);

# уложить на него исходное изображение
imagecopyresampled($dst_img$src_im0000$dst_w$dst_h$src_w$src_h); 
Для суффикса. У Вас же здесь:
PHP код:
$title implode('.',$file_parts); 
уже имя. И добавляйте к нему что угодно. Расширение чуть раньше получено, в $ext.
x64 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Извлечение миниатюр из файлов картинок 3D Hunter Win Api 0 10.04.2015 09:23
Создание миниатюр, не загружая изображение поностью DanilaN C++ Builder 1 12.10.2012 09:18
PHP. Создание комментариев Makaralex Помощь студентам 3 21.07.2012 19:15
создание карты на php ИльяМалиновский PHP 5 12.02.2009 18:18
HTML-документы в виде миниатюр(эскизов) Shreksan Софт 0 15.01.2008 18:02