Изменить размер картинки средствами php

Dimush

Guest
Изменить размер картинки средствами php

Необходимо без искажений создать две копии картинки средствами php. Оригинал неопределенного размера(ширина и высота), и две копии определенного формата(одна побольше другая поменьше). Дальнейшая судьба скрипта не известна, поэтому хотелось обойтись стандартными средствами.
Подскажите как это можно реализовать.

P.S. Задача сделать галерею с маленькими превьюшками и "оригиналами изображения" определенного размера, может быть для этого вовсе не обязательно сохранять необходимые копии изображений на сервере, а генерировать изображение на лету по запросу пользователя?
 

Dimush

Guest
По поводу: - "как установить gd", я полагаю, поже в поиск отправите.
 

DimbIch

Новичок
Dimush
ДА поиск юзай.....
читай правила внимательнее плиз....
 

Dimush

Guest
Что-то я не понимаю, разъясните пожалуйста, почему в результате выполнения:
PHP:
$size = GetImageSize("$file");
$src_width = $size[0];
$src_height = $size[1];

echo $scr_width.'1<br>';
echo $size[0].'2<br>';
Результат:

PHP:
1
10242
??
 

advocat

developer
hobobob - это больше на аномалию кривых рук похоже :) судя с приведеного куска кода, такого быть не может ... echo $size[0] у него выводится правильно

Dimush сделай так например:
list($width, $height, $type, $attr) = getimagesize("img/flag.jpg");

З.Ы. GetImageSize("$file"); забудь ты про кавычки для переменных! лучше: getimagesize($file);
 

SelenIT

IT-лунатик :)
в приведенном фрагменте банальная опечатка: $src_width - $scr_width
 

Dimush

Guest
это больше на аномалию кривых рук похоже
вот Весь скрипт
PHP:
<?php 

function image_resize($file) 
	{
    $src_img=ImageCreateFromJpeg($file); 
	$size = GetImageSize($file);
		
    $src_width = $size[0];
    $src_height = $size[1];
	   
	$dest_width = "300";
	$dest_height = ($dest_width/$scr_width) * $scr_height;
	
    $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", "null.jpg", "80"); 
    ImageDestroy($dest_img); 
    
    /*для проверки*/
    if (!$scr_width) echo А нет!<br>';
    print_r($size);
	} 

image_resize("file.jpg");

?>

SelenIT ааааааааа
 

DimbIch

Новичок
$src_width = $size[0];
$src_height = $size[1];

...............

$dest_height = ($dest_width/$scr_width) * $scr_height;

а когда мы научимся правильно писать переменные ??????
и сами код отлаживать ?????
 

Dimush

Guest
долгая отлучка от программирования плохо влияет на внимание, спасибо за найденный косяк, сам бы до вечера сидел.
вот финальный код:

PHP:
<?php 

function image_resize($file) 
	{
    $scr_img=ImageCreateFromJpeg($file); 
	$size = GetImageSize($file);
		
    $scr_width = $size[0];
    $scr_height = $size[1];
	   
	$dest_width = "300";
	$dest_height = ($dest_width/$scr_width) * $scr_height;
	
    $dest_img=ImageCreateTrueColor($dest_width, $dest_height); 
    ImageCopyResampled($dest_img, $scr_img, 0, 0, 0, 0, $dest_width, $dest_height, $scr_width, $scr_height); 

    ImageJpeg($dest_img, "null.jpg", 80); 
    ImageDestroy($dest_img); 
	} 

image_resize("file.jpg");

?>
есть ли еще какие-нибудь моменты при ресайзе?
 

DimbIch

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

advocat

developer
Dimush
моментов особо нет :) но учись мыслить более глобально :)
ссылка наскидку http://www.phphulp.nl/php/scripts/1/135/
 

DimbIch

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

хотя на будущее в другой скрипт будет клево :)
 

Dimush

Guest
Ок, вопросов больше нет, спасибо за помощь.
 

advocat

developer
DimbIch видимо для тебя слово универсальность - ничего не обозначает :)
 

Frol

Новичок
Dimush
PHP:
error_reporting(E_ALL);
ini_set('display_errors', 1);
спасает от таких опечаток
 

DimbIch

Новичок
advocat
универсальность должна быть оправданной......

если я знаю что у меня четко будут только джипеги...зачем мне писать условия на гифы ????
 

advocat

developer
DimbIch
я не хочу разводить флейм на эту тему, но если у тебя будет, более или менее универсальная ф-ция, умеющая обрабатывать в том числе и GIF, я более чем уверен, что это ничем тебе не помешает.

Или ты хочешь сказать, что если тебе завтра нужно будет обрабатывать гифы, ты будешь писать еще одну функцию ?
 
Сверху