图像无法显示

时间:2015-05-18 16:19:59

标签: php

我有这个代码,我想调整图片大小,它设法做第一个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++;
    }



?>

2 个答案:

答案 0 :(得分:0)

$total_pic_size始终为2

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

这将为您提供正确数量的项目,并且循环不应该只运行一次。

您还应该更改循环条件:

while ($x <= $total_pic_size) {

#Update 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);
}

答案 1 :(得分:0)

你只迭代两次,因为

 $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

并将输出用作回显图像的 # @"""\s*(?:'([^']*(?:''[^']*)*)'\s*(?:,\s*|(?="")))+""" " \s* (?: ' ( # (1 start) [^']* (?: '' [^']* )* ) # (1 end) ' \s* (?: , \s* | (?= " ) ) )+ "