【问题标题】:ImageSX and ImageSY supplied argument is not a valid Image resourceImageSX 和 ImageSY 提供的参数不是有效的图像资源
【发布时间】:2012-08-27 02:59:12
【问题描述】:

我很难理解这个函数和包含的代码的问题。

我可以告诉它所有密集的目的都应该没有问题。

我正在运行 GD 库 2.034,这是我正在执行的代码:

function createthumb($name,$filename,$new_w,$new_h){
$system=explode('.',$name); 
if (preg_match('/jpg|jpeg/',$system[1])){ 
    $src_img=imagecreatefromjpeg($name);
} 
if (preg_match('/png/',$system[1])){ 
    $src_img=imagecreatefrompng($name); 
}

//sizing 
$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; 
}

//keep colours 
$dst_img=ImageCreateTrueColor($thumb_w,$thumb_h); 
imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y);

//rebuild image 
if (preg_match("/png/",$system[1])) { 
    imagepng($dst_img,$filename); 
} 
else { 
    imagejpeg($dst_img,$filename); 
} 
imagedestroy($dst_img); 
imagedestroy($src_img); 
}

然后执行如下:

$filenameresize = strtolower($_FILES['pic']['name']);
$mkfilename = time() . strrchr($filenameresize, '.');
$newfilename = $imagepath . $mkfilename;
createthumb($newfilename, $imagepath . "/thumbs/tn_" . $mkfilename,100,100);

回响

$newfilename
如果它在 createthumb 函数之前回显,则给出它的名称,但如果在之后回显则不会产生。

我错过了什么?

【问题讨论】:

  • 错误消息说“没有有效的图像资源”。也许文件扩展名中的大写字母?然后你永远不会去'imagecreatefrom...'函数,因为检查只针对小写扩展。
  • 这是个主意,我来了!
  • 已编辑问题以反映无效的更改,另外我检查了文件名前后都为小写。我在想这可能有帮助吗? $dimensions = getimagesize($_FILES["pic"]["tmp_name"]);

标签: php function gd thumbnails


【解决方案1】:

我修好了!

这是解决方案。

问题在于按代码收集文件类型,而 preg 匹配不正确。

我添加了这些行:

list($old_x, $old_y, $type) = getimagesize($name);
switch ($type)
 {
case 1:   //   gif -> jpg
  $src_img = imagecreatefromgif($name);
break;

case 2:   //   jpeg -> jpg
  $src_img = imagecreatefromjpeg($name); 
break;

case 3:  //   png -> jpg
  $src_img = imagecreatefrompng($name);
break;
}

并删除了这些行:

$system=explode('.',$name); 
if (preg_match('/jpg|jpeg/',$system[1])){ 
  $src_img=imagecreatefromjpeg($name);
} 
if (preg_match('/png/',$system[1])){ 
  $src_img=imagecreatefrompng($name); 
}

$old_x=imageSX($src_img); 
$old_y=imageSY($src_img); 

希望这对你们中的一些人有所帮助。

【讨论】:

  • 为什么不使用文件扩展名来确定文件类型的好例子。为了提高可读性,请更改您的 case 值以使用 IMAGETYPE_XXX 内容,例如您的示例中的 IMAGETYPE_GIF、IMAGETYPE_JPEG 和 IMAGETYPE_PNG。 See documentation on related exif_imagetype function 了解有关图像类型和预定义常量的可能返回值的详细信息。
猜你喜欢
  • 2013-01-08
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 1970-01-01
相关资源
最近更新 更多