Проблема с миниатюрами после добавления - метод PHP на лету - PullRequest
0 голосов
/ 31 мая 2010

Привет еще раз ... тем, кто, возможно, прочитал мой предыдущий вопрос, который был решен пару минут назад>. <</p>

Сценарий php «на лету» работает отлично, но когда я отправил загружать новые изображения в галерею, которую я сделал сам, размер изображения был изменен до 150 x 150 для того, что я хотел ... однако, когда это происходит к добавляемым новым изображениям все черное ...

альтернативный текст http://i48.tinypic.com/2qth175.png

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

Другие (не черные изображения) уже изменены с image.php.

Что вызывает это?

Если я просматриваю исходный код, код в порядке ... цикл while в PHP генерирует вывод, подобный следующему:

<div class="view-wrap" id="photo-10">
    <div class="view-icon">
        <div class="img-label">
            <a href="#" id="10" class="delete"><img src="img/small-delete.png" /> Delete</a>
        </div>

        <a href="img/events/Paintballing/24251_1395408043148_1170626626_1204038_5382765_n.jpg">
            <img src="image.php?dir=img/events/Paintballing/24251_1395408043148_1170626626_1204038_5382765_n.jpg" alt="" width="110" height="110" />
        </a>
    </div>
</div>

Пример одного блока.

Если я просматриваю источник (в Firefox) и нажимаю на файл image.php? Dir = img / events / Paintballing / 24251_1395408043148_1170626626_1204038_5382765_n.jpg, например, я могу видеть эскиз в размере 150 x 150, но в макете, это показывает черный эскиз ...

Кто-нибудь знает, почему это происходит?

EDIT:

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

?>

Это image.php.

Ответы [ 2 ]

0 голосов
/ 08 июня 2010

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

Вот функция

    function resize_to_canvas($filename,$canvas_w=100,$canvas_h=225){
list($width, $height, $type) = getimagesize($filename);

$original_overcanvas_w = $width/$canvas_w;
$original_overcanvas_h = $height/$canvas_h;

$dst_w = round($width/max($original_overcanvas_w,$original_overcanvas_h),0);
$dst_h = round($height/max($original_overcanvas_w,$original_overcanvas_h),0);

$dst_image = imagecreatetruecolor($canvas_w, $canvas_h);
$background = imagecolorallocate($dst_image, 255, 255, 255);
imagefill($dst_image, 0, 0, $background);

$src_image = imagecreatefromjpeg($filename);
imagecopyresampled($dst_image, $src_image, ($canvas_w-$dst_w)/2, ($canvas_h-$dst_h)/2, 0, 0, $dst_w, $dst_h, $width, $height);
imagegif($dst_image, $filename);
imagedestroy($dst_image);}

Эта функция заменит исходный файл, но ее легко изменить, чтобы создать новое эскизное изображение. Просто измените имя файла на строку imagegif ($ dst_image, $ filename);

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

Спасибо за обновление вашего сообщения.

Вы уверены, что это изображение в формате jpg / jpeg, которое вы загружаете?

Попробуйте перейти к следующему

<?php 

$dir = $_GET['dir'];
$ext = strtoupper(pathinfo($dir, PATHINFO_EXTENSION));
switch($ext)
{
    case 'jpeg':
    case 'jpg':
        $img = imagecreatefromjpeg($dir);
    break;
    case 'png':
        $img = imagecreatefrompng($dir);
    break;
    case 'gif':
        $img = imagecreatefromgif($dir);
    break;
}
if(isset(img))
{
    header('Content-type: image/jpeg'); 
    $create = imagecreatetruecolor(150, 150); 
    list($width, $height) = getimagesize($dir);
    imagecopyresampled($create, $img, 0, 0, 0, 0, 150, 150, $width, $height);
    imagejpeg($create, null, 100); 
}else
{
   echo sprintf('Unable to process image, Unknown format %s',$ext);
}
?>
...