Функция imagepng не совсем работает - PullRequest
0 голосов
/ 08 декабря 2010

Я получаю следующее сообщение об ошибке, когда из сценария, который я использую для создания миниатюры

Внимание: imagepng () [function.imagepng]: Невозможно открыть 'Manga / One Piece / asd / Thumbnail'для записи: это каталог в /homez.380/mangasma/www/mangaUpload.php в строке 220

, это строка, вызывающая ошибку

imagepng($dst_img,$dir);

и вот метод

function createthumb($source,$output,$new_w,$new_h)
{
    $dirpos=strrpos($output,"/");
    $dir= substr($output,0,$dirpos);
    if(!file_exists($dir))
    {
        mkdir($dir);
        chmod($dir,0775);
    }else
    {
        chmod($dir,0775);
    }
    $ext=explode(".",$source);
    $ext=$ext[count($ext)-1];
    $ext=strtolower($ext);

if (preg_match("/jpg|jpeg/",$ext)){$src_img=imagecreatefromjpeg($source);}
    if (preg_match("/png/",$ext)){$src_img=imagecreatefrompng($source);}
    if (preg_match("/gif/",$ext)){$src_img=imagecreatefromgif($source);}

    echo $src_img;

    $old_x=imageSX($src_img);
    $old_y=imageSY($src_img);
    if ($old_x > $old_y) 
    {
        $thumb_w=$new_w;
        $thumb_h=$old_y*($new_h/$old_x);
    }
if ($old_x < $old_y) 
    {
        $thumb_w=$old_x*($new_w/$old_y);
        $thumb_h=$new_h;
    }
    if ($old_x == $old_y) 
    {
        $thumb_w=$new_w;
        $thumb_h=$new_h;
    }
    $dst_img=ImageCreateTrueColor($thumb_w,$thumb_h);
    imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y);

    if (preg_match("/png/",$ext))
    {   
        imagepng($dst_img,$dir);
    }
elseif (preg_match("/gif/",$ext))
    {
        imagegif($dst_img,$dir); 
    } elseif (preg_match("/jpg|jpeg/",$ext)) {
        imagejpeg($dst_img,$dir); 
    }
    imagedestroy($dst_img); 
    imagedestroy($src_img);
    return array("w"=>$thumb_w,"h"=>$thumb_h);
}

1 Ответ

3 голосов
/ 08 декабря 2010

$dir должен быть не папкой, а путем к файлу (то есть: $dir = 'Manga/One Piece/asd/Thumbnail/1.png';)

Например, непосредственно перед imagepng($dst_img,$dir);imagegif и imagejpeg),Вы можете добавить строку:

$dir .= '/test.png';

Поскольку вы используете функцию, вы можете / должны передать выходное имя файла в качестве параметра

...