2010-05-30 4 views
1

Я пришел с этим:На лету эскизы PHP

<?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

Который работает отлично ... но выход является ужасным:

alt text 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); 

?> 
+0

Вы также можете использовать .htaccess переписать URL и есть пути, такие как: http://domain.com/imagephp/thisistheimage.jpg –

+0

Вы должны сохранить копию измененного изображения с параметрами ширина/высота в имя файла и проверить, существует ли оно перед обработкой и обслуживать его, чтобы вы оставили нагрузку на сервере. Также используйте imagedestroy ($ create) после imagejpeg(), чтобы освободить память. – stagas

ответ

6

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

$newwidth = 150; 
$newheight = 150; 
imagecopyresized($create, $image, 0, 0, 0, 0, $newwidth, $newheight, $oldwidth, $oldheight); 
+0

Каковы определения $ oldwidth и $ oldheight? – MacMac

+0

все, что бы они ни были для вашего изображения ... –

+0

Ah да, конечно, разобрал его сейчас, добавил решение в отредактированном сообщении :) – MacMac

1

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

+0

Лучше в качестве комментария. Это не ответ. – stagas

+3

Это был совершенно правильный ответ по необработанному ОРИГИНАЛУ. – CharlesLeaf

+0

Извините, я пытаюсь отменить голосование, но он говорит, что он заблокирован. Тем не менее, это ленивый ответ, вероятно, вы должны удалить его. – stagas

1

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

Если $ 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); 

?>