Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Графика > Создание уменьшенной копии JPG картинки...


Автор: Mal Hack 19.2.2004, 21:02
Народ, подскажите, второй день голову ломаю - ничего в голову не приходит. Есть папка с файлами JPG. Надо для галлереи сделать предпросмотр.
Отсюда вопрос. Чтобы не делать вручную маленькие картинки, можно ли с помощью PHP из уже имеющегося файла сделать его уменьшенную копию.
Если да, то как...
ЗЫ: Ранее с GD не работал...

Автор: Master 19.2.2004, 21:14
Код
<?php

function image_chop($file) {
$path_real=$file;
$src_img=ImageCreateFromJpeg("$path_real");

$src_width=ImagesX($src_img);
$src_height=ImagesY($src_img);

$dest_height="390";
$quality="60";

$dest_width=($dest_height/$src_height) * $src_width;

$dest_img=ImageCreateTrueColor($dest_width, $dest_height);
ImageCopyResampled($dest_img, $src_img, 0, 0, 0, 0, $dest_width, $dest_height, $src_width, $src_height);

ImageJpeg($dest_img, $file, $quality);
ImageDestroy($dest_img);
}


function list_dir($d) {
$dir = opendir($d);
while ((($file = readdir($dir))!==false)) {
 if ((filetype($d.$file) == "file") && (strstr($file,".jpg"))) {
  image_chop($d.$file);
  echo $file."<BR>";
 } elseif ((filetype($d.$file) == "dir") && ($file !== ".") && ($file !== "..") && (is_dir($d.$file))) {
  echo "DIR - ".$file."<BR>";
  list_dir($d.$file."/");
 }
}
}


list_dir($DOCUMENT_ROOT."/tmp/");

?>


Я делал так. находит в каталоге /tmp/ файлы в имени которых встречается .jpg и делает их 390 по высоте с пропорцианальной шириной. и качеством 60.

Автор: Mal Hack 19.2.2004, 21:32
Master, спасибо, большое, более менее понял.
А вот подскажи, плиз, как не перезаписать тот же файл, а либо записать новый с именем *_small.jpg и как просто послать уменьшенную копию браузеру, без сохранения..

Автор: __vi 25.2.2004, 10:51
ImageMagic если сервак на нормальной оси.

Автор: Raptus Melanholicus 25.2.2004, 16:42
__vi Image::Magic? Ты ничего не перепутал?.. Это ж php а не perl..

Автор: papex 22.3.2004, 04:21
Не работает.
Это скрип я и сам написал. Но он не работает как надо.

Автор: LordZeus 28.7.2009, 13:02
Master,  Спасибо...помогло... немного конечно перебрал твой код, но все таки получилось то, что хотел. В основном причиной неудач было использование imagecopyresized. Надо сразу было использовать ImageCopyResampled...

все приходит с опытом =)  smile 

Автор: skyboy 28.7.2009, 15:06
LordZeus, 5 лет назад в GD вполне могло не быть imagecopyresampled.
кроме того, бинарные тулзы из пакеты imagemagick будут на порядок быстрее GD. конечно, если ты на своем хостинге имеешь право запускать бинарники.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)