Изменение размера Jpeg на стороне сервера с помощью PHP - PullRequest
0 голосов
/ 19 ноября 2011

Я хотел бы изменить размеры изображений на стороне сервера, чтобы сделать миниатюру динамически. Я использую этот код:

<?php
Header("Content-type: image/jpeg"); 
$img_src = $_GET['photo']; 

$size = getimagesize($img_src);

$src_w = $size[0];
$src_h = $size[1]; 

$dst_w = 80;
$dst_h = 80;

$test_h = round(($dst_w / $src_w) * $src_h); 
$test_w = round(($dst_h / $src_h) * $src_w); 


if($src_w > $src_h) {
    $x = $test_w;
    $y = $dst_h;
} elseif($src_h > $src_w) {
    $x = $dst_w;
    $y = $test_h;
}

$img_new = imagecreatefromjpeg($img_src); 
$img_mini = imagecreatetruecolor($x, $y); 
imagecopyresampled($img_mini,$img_new,0,0,0,0,$x,$y,$src_w,$src_h); 
imagejpeg($img_mini); 
?>

Но это не сработало, и я не могу понять, почему. Там нет ошибки, просто ничего не появилось. Кто-нибудь может мне помочь?

Спасибо;

Ответы [ 5 ]

2 голосов
/ 19 ноября 2011

Если вы получаете пустую страницу, то либо превышен тайм-аут вашего скрипта, либо превышен лимит памяти php. Используйте функцию ini_set для установки memory_limit и max_execution_time перед запуском любой функции gd.

Работа с изображениями требует времени и памяти. Так что эти конфигурации важны.

0 голосов
/ 19 ноября 2011

Возможно, вам нужно перевести получаемый вами URL в фактический путь к файлу, чтобы вы могли открыть файл. Я ожидаю, что используемые вами функции ожидают путь к файлу, а не URL. Если нет, то в противном случае вы должны выполнить 2 дополнительных запроса, чтобы избежать загрузки одного изображения и изменения размера с помощью CSS на клиенте.

В любом случае, если вы собираетесь изменить размер миниатюры, вам действительно следует кэшировать миниатюру в подкаталоге thumbs (или другом). Затем при каждом запросе проверяйте, существует ли миниатюра, предоставляя ее непосредственно, если это так, перед созданием миниатюры. Или, если файлы не загружаются динамически, предварительно создайте миниатюры и просто ссылайтесь на них из каталога thumbs напрямую.

0 голосов
/ 19 ноября 2011

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

Пример:

if (isset($img_src)) {
    echo "No image parameter set in the URL";
    return;
}
0 голосов
/ 19 ноября 2011

Проверьте эту строку:

$size = getimagesize($img_src);

Где вы определили $img_src?Я не вижу его!

РЕДАКТИРОВАТЬ Используйте этот код для записи файла на диск, а затем перенаправить на записанный файл:

<?php

$chemin = $_GET['photo']; 

$size = getimagesize($chemin);


$src_w = $size[0];
$src_h = $size[1]; 

$dst_w = 80;
$dst_h = 80;

$test_h = round(($dst_w / $src_w) * $src_h); 
$test_w = round(($dst_h / $src_h) * $src_w); 


if($src_w > $src_h) {
    $x = $test_w;
    $y = $dst_h;
} elseif($src_h > $src_w) {
    $x = $dst_w;
    $y = $test_h;
}

$img_new = imagecreatefromjpeg($chemin); 
$img_mini = imagecreatetruecolor($x, $y); 

imagecopyresampled($img_mini, $img_new, 0, 0, 0, 0, $x ,$y, $src_w, $src_h); 

$name=rand() * rand() . '.jpg';

imagejpeg($img_mini, $name); 
header("Location: $name");

?>
0 голосов
/ 19 ноября 2011

Какую ошибку вы получили?

В противном случае ... взгляните на эту статью: http://www.white -hat-web-design.co.uk / blog / resizing-images-with-php /

...