На лету эскизы PHP - PullRequest
       39

На лету эскизы PHP

2 голосов
/ 31 мая 2010

Я придумал это:

<?php 

$dir = $_GET['dir'];

header('Content-type: image/jpeg'); 

$create = imagecreatetruecolor(150, 150); 
$img = imagecreatefromjpeg($dir); 
imagecopyresampled($create, $img, 0, 0, 0, 0, 150, 150, 150, 150); 

imagejpeg($create, null, 100); 

?>

Работает путем доступа:

http://domain.com/image.php?dir=thisistheimage.jpg

Что работает нормально ... но вывод ужасен:

альтернативный текст http://i47.tinypic.com/119s47a.jpg

Может кто-нибудь исправить мой код для изображения размером 150 x 150, покрывающего черную область ...

Спасибо.

РЕШЕНИЕ:

<?php 

$dir = $_GET['dir'];

header('Content-type: image/jpeg'); 

list($width, $height) = getimagesize($dir);

$create = imagecreatetruecolor(150, 150); 
$img = imagecreatefromjpeg($dir); 

$newwidth = 150;
$newheight = 150;

imagecopyresized($create, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

imagejpeg($create, null, 100); 

?>

Ответы [ 3 ]

6 голосов
/ 31 мая 2010

Использование imagecopyresized:

$newwidth = 150;
$newheight = 150;
imagecopyresized($create, $image, 0, 0, 0, 0, $newwidth, $newheight, $oldwidth, $oldheight);
1 голос
/ 31 мая 2010

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

Если $ dir - ваше имя файла, вы можете использовать getimagesize , чтобы получить исходные размеры изображения.

Вы можете использовать imagecopyresized или imagecopyresampled. Разница в том, что imagecopyresized будет копировать и изменять размер, в то время как imagecopyresampled также будет повторно пробовать ваше изображение, что даст лучшее качество.

<?php 

$dir = $_GET['dir'];

header('Content-type: image/jpeg'); 

$create = imagecreatetruecolor(150, 150); 
$img = imagecreatefromjpeg($dir);
list($width, $height) = getimagesize($dir);
imagecopyresampled($create, $img, 0, 0, 0, 0, 150, 150, $width, $height);

imagejpeg($create, null, 100); 

?>
1 голос
/ 31 мая 2010

Последние 2 150 должны быть исходной шириной и высотой полноразмерного изображения.

...