簡體   English   中英

圖像不顯示

[英]Image doesn't display

我有這段代碼,我想調整圖片的大小,它設法執行第一個100x100而不是其他的。 我不明白為什么它不起作用,它沒有任何錯誤。 我是php新手,真的不知道出了什么問題,但是如您所見,該代碼確實適用於第一個代碼,但是為什么不適用於其他代碼呢?

    <?php

function thumbnail($image, $width, $height) {

    $image_properties = getimagesize($image);
    $image_width = $image_properties[0];
    $image_height = $image_properties[1];
    $image_ratio = $image_width / $image_height;
    $type = $image_properties["mime"];

    if(!$width && !$height) {
        $width = $image_width;
        $height = $image_height;
    }
    if(!$width) {
        $width = round($height * $image_ratio);
    }
    if(!$height) {
        $height = round($width / $image_ratio);
    }


    if($type == "image/jpeg") {
        header('Content-type: image/jpeg');
        $thumb = imagecreatefromjpeg($image);
    } elseif($type == "image/png") {
        header('Content-type: image/png');
        $thumb = imagecreatefrompng($image); 
    } elseif($type == "image/gif") {
        header('Content-type: image/gif');
        $thumb = imagecreatefromgif($image);
    }
    else {
        return false;
    }

    $temp_image = imagecreatetruecolor($width, $height);
    imagecopyresampled($temp_image, $thumb, 0, 0, 0, 0, $width, $height, $image_width, $image_height);
    $thumbnail = imagecreatetruecolor($width, $height);
    imagecopyresampled($thumbnail, $temp_image, 0, 0, 0, 0, $width, $height, $width, $height);

    if($type == "image/jpeg") {
        imagejpeg($thumbnail);
    } 
    elseif($type == "image/jpeg") {
        imagepng($thumbnail);
    } 
    elseif($type == "image/gif") {
        imagegif($thumbnail);
    }

    imagedestroy($temp_image);
    imagedestroy($thumbnail);


}

$pic_size = array();

// Adjust size

$pic_size['height'][0] = 100;
$pic_size['width'][0] = 100;

$pic_size['height'][1] = 200;
$pic_size['width'][1] = 200;

$pic_size['height'][2] = 300;
$pic_size['width'][2] = 300;

$pic_size['height'][3] = 400;
$pic_size['width'][3] = 400;

$pic_size['height'][4] = 500;
$pic_size['width'][4] = 500;

$total_pic_size= count($pic_size['height']);

    $x = 0;

   foreach(array_keys($pic_size['height']) as $x) {
        thumbnail($_GET["img"], $pic_size['width'][$x], $pic_size['height'][$x]);
        echo '<img src="index.php?w='.$pic_size['width'][$x].'&h='.$pic_size['height'][$x].'&img='.$_GET["img"].'" />';
        $x++;
    }



?>

您的$total_pic_size始終為2

$total_pic_size = count( $pic_size['width'] );

這將為您提供正確數量的項目,並且循環不應僅運行一次。

您還應該更改循環條件:

while ($x <= $total_pic_size) {

#更新1

您可以嘗試如下操作:

// ...

$pic_sizes[0]['height'] = 100;
$pic_sizes[0]['width'] = 100;

$pic_sizes[1]['height'] = 200;
$pic_sizes[1]['width'] = 200;

$pic_sizes[2]['height'] = 300;
$pic_sizes[2]['width'] = 300;

$pic_sizes[3]['height'] = 400;
$pic_sizes[3]['width'] = 400;

$pic_sizes[4]['height'] = 500;
$pic_sizes[4]['width'] = 500;

$img = $_GET["img"];
foreach ($pic_sizes as $pic_size) {
    thumbnail($img, $pic_size['width'], $pic_size['height']);
    echo '<img src="index.php?w='.$pic_size['width'].'&h='.$pic_size['height'].'&img='.$img.'" />';
}

#Update 2:

您已經接受了另一個應答者,但這也許對您也有幫助。 我在您的代碼中發現了更多錯誤和邏輯問題...下面的代碼有效(無需花費很多時間)。

<?php

function thumbnail($image, $width, $height) {
    $image_properties = getimagesize($image);
    $image_width = $image_properties[0];
    $image_height = $image_properties[1];
    $image_ratio = $image_width / $image_height;
    $type = $image_properties["mime"];

    if(!$width && !$height) {
        $width = $image_width;
        $height = $image_height;
    }
    if(!$width) {
        $width = round($height * $image_ratio);
    }
    if(!$height) {
        $height = round($width / $image_ratio);
    }


    if($type == "image/jpeg") {
        header('Content-type: image/jpeg');
        $thumb = imagecreatefromjpeg($image);
    } elseif($type == "image/png") {
        header('Content-type: image/png');
        $thumb = imagecreatefrompng($image); 
    } elseif($type == "image/gif") {
        header('Content-type: image/gif');
        $thumb = imagecreatefromgif($image);
    }
    else {
        return false;
    }

    $temp_image = imagecreatetruecolor($width, $height);
    imagecopyresampled($temp_image, $thumb, 0, 0, 0, 0, $width, $height, $image_width, $image_height);
    $thumbnail = imagecreatetruecolor($width, $height);
    imagecopyresampled($thumbnail, $temp_image, 0, 0, 0, 0, $width, $height, $width, $height);

    if($type == "image/jpeg") {
        imagejpeg($thumbnail);
    } 
    elseif($type == "image/png") {
        imagepng($thumbnail);
    } 
    elseif($type == "image/gif") {
        imagegif($thumbnail);
    }

    imagedestroy($temp_image);
    imagedestroy($thumbnail);
}

$img = $_GET["img"];

$gen = @$_GET["gen"];
$w = @$_GET["w"];
$h = @$_GET["h"];
if ( !$gen ) {
    $pic_sizes = array();

    // Adjust size
    $pic_sizes[0]['height'] = 100;
    $pic_sizes[0]['width'] = 100;

    $pic_sizes[1]['height'] = 200;
    $pic_sizes[1]['width'] = 200;

    $pic_sizes[2]['height'] = 300;
    $pic_sizes[2]['width'] = 300;

    $pic_sizes[3]['height'] = 400;
    $pic_sizes[3]['width'] = 400;

    $pic_sizes[4]['height'] = 500;
    $pic_sizes[4]['width'] = 500;

    foreach ($pic_sizes as $pic_size) {
        echo '<img src="'.$_SERVER['PHP_SELF'].'?w='.$pic_size['width'].'&h='.$pic_size['height'].'&img='.$img.'&gen=1" />';
    }
} else {
    thumbnail($img, $w, $h);
}

您僅重復兩次,因為

 $total_pic_size= count($pic_size);// is 2

更改為:

$total_pic_size= count($pic_size['height']);

或使用foreach:

foreach(array_keys($pic_size['height']) as $x)

並且不要在此處使用COUNT_RECURSIVE ,它將再次返回錯誤的數字,並以widthheight鍵為單位。

thumbnail函數中也有header調用,不能在echo之后調用,在您的情況下,在您的循環中,此調用在echo之后調用。 您應該看到警告消息:“標題已發送”。

您可以將圖像保存到文件並以文件路徑作為源回顯圖像。 刪除header調用,讓您的thumbnail函數保存它並返回文件名,例如:

imagejpeg($thumbnail, $filename);
return $filename;

並將輸出用作回顯圖像的src

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM