imagejpeg - 无法打开流

时间:2013-12-02 08:58:52

标签: php

我使用函数resizeImage()来调整图像大小,但偶尔会失败。大部分时间它都在工作,但我有时会发出这个警告,说它无法找到文件。应该是什么问题?如何解决这个问题?

思路:

  1. 文件的权限
  2. 错误的图片路径
  3. <德尔>会话
  4. 写入dir的权限
  5. 用法:

    <?php
    
    session_start();
    
    define('DS', DIRECTORY_SEPARATOR);
    define('ROOT_DIR', realpath(dirname(__FILE__)) . DS);
    
    $image = ROOT_DIR . 'cache' . DS . $_SESSION['file_name'];
    resizeImage($image, 400, 400);
    

    引发错误:

    Warning: imagejpeg(C:\wamp\www\mvc\cache\temp_1385972631.jpg): failed to open stream: Invalid argument in C:\wamp\www\mvc\application\helpers\image_helper.php on line 95
    

    第95行:imagejpeg($newImage, $image, 100);

    这是 resizeImage()功能:

    <?php
    
    function resizeImage($image, $max_width, $max_height) {
    
        $img = getimagesize($image);
    
        $mime = $img['mime'];
        $width = $img[0];
        $height = $img[1];
    
        if ($height > $width) {
            $scale = $max_height / $height;
        }
        elseif ($width > $height) {
            $scale = $max_width / $width;
        }
        else {
            $scale = 1;
        }
    
        $newImageWidth = ceil($width * $scale);
        $newImageHeight = ceil($height * $scale);
        $newImage = imagecreatetruecolor($newImageWidth, $newImageHeight);
        imagealphablending($newImage, false);
        imagesavealpha($newImage, true);
        switch ($mime) {
            case "image/gif":
                $source = imagecreatefromgif($image);
                break;
            case "image/pjpeg":
            case "image/jpeg":
            case "image/jpg":
                $source = imagecreatefromjpeg($image);
                break;
            case "image/png":
            case "image/x-png":
                $source = imagecreatefrompng($image);
                break;
        }
        imagecopyresampled($newImage, $source, 0, 0, 0, 0, $newImageWidth, $newImageHeight, $width, $height);
    
        switch ($mime) {
            case "image/gif":
                imagegif($newImage, $image);
                break;
            case "image/pjpeg":
            case "image/jpeg":
            case "image/jpg":
                imagejpeg($newImage, $image, 100); // line #95
                break;
            case "image/png":
            case "image/x-png":
                imagepng($newImage, $image);
                break;
        }
    
        chmod($image, 0777);
        return $image;
    }
    

    修改 在imagejpeg之前添加了var_dump($ newImage,$ image,100); //第102行

    //var_dump($newImage);
    resource(18) of type (gd)
    
    //var_dump($image);
    string(41) "C:\wamp\www\mvc\cache\temp_1385978306.jpg"
    
    Warning: imagejpeg(C:\wamp\www\mvc\cache\temp_1385978306.jpg): failed to open stream: Invalid argument in C:\wamp\www\mvc\application\helpers\image_helper.php on line 102
    

1 个答案:

答案 0 :(得分:1)

我有同样的问题。 可能是因为你没有创建名为&#39; cache&#39;的文件夹。 (似乎GD不创建目录并假设该目录之前已创建并具有所需权限(例如0777)。)

相关问题