【问题标题】:php imagecopyresized() making full black thumbnailphp imagecopyresized() 制作全黑缩略图
【发布时间】:2013-02-03 06:44:16
【问题描述】:

所以,我有这门课是半途而废。 不知何故,我无法复制上传图像的重新调整大小的样本,只有一个具有“正确”尺寸的黑色“正方形”(拧紧尺寸,只要拇指清晰。一次一步)。

我为 WOT 感到抱歉,但它让我发疯了。 提前致谢。

    <?php 
    class Upload {
#function from http://stackoverflow.com/a/10666106/587811
public function resize_values($origWidth,$origHeight,$maxWidth = 200,$maxHeight = 200){
    #check for longest side, we'll be seeing that to the max value above
    if($origHeight > $origWidth){ #if height is more than width
        $newWidth = ($maxHeight * $origWidth) / $origHeight;
        $retval = array(width => $newWidth, height => $maxHeight);
    }
    else{
        $newHeight= ($maxWidth * $origHeight) / $origWidth;
        $retval = array(width => $origWidth, height => $newHeight);
}
    return $retval;
}
public function image($picurl, $file, $path="images/uploaded/") {
    echo "function chamada!";
    if ($picurl) {
        $picFileName=rand(1,9999).$_SESSION['id'];
        $picExt=substr(strstr($picurl,'.'),1,3);
        $picExt=strtolower($picExt);
        $allowed = array("jpg","png","gif","bmp");
        if (in_array($picExt,$allowed)) {
            if (getimagesize($file)) {
                $picNewName=str_replace(" ","_",$picFileName.'.'.$picExt);
                $picWhereTo=$path.$picNewName;
                $copy=move_uploaded_file($file, $picWhereTo);       
                if ($copy) {

                    list($width, $height) = getimagesize($picWhereTo);
                    $size = $this->resize_values($width,$height,250,250);
                    $thumb = imagecreatetruecolor($size['width'],$size['height']);
    imagealphablending($thumb, false);
                    $source = imagecreatefromjpeg($picWhereTo);
                    imagecopyresized($thumb,$source,0,0,0,0,$size['width'],$size['height'],$width,$height);
                    $picNewName=$picFileName.'_thumb.'.$picExt;
                    imagejpeg($thumb,$path.$picNewName);

                    $picinfo['where']=$picWhereTo;
                    $picinfo['name']=$picNewName;
                    return $picinfo;
                }
                else return false;
            }
            else return false;
        }
        else return false;
    }
}
    }
    ?>

【问题讨论】:

  • 而不是使用 imagecopyresized 使用 imagecopy

标签: php image gd thumbnails


【解决方案1】:

我遇到过类似的问题。这与具有透明度的png有关。

在使用 imagecreatetruecolor() 创建 $thumb 后试一试;

imagealphablending($thumb, false);

我不完全确定这是解决方案 - 但我认为它在正确的轨道上。您的真实颜色支持 alpha 混合 - 它是在 jpeg 的背景中混合 - 它可能会因缺乏信息而感到困惑。

如果这不起作用,请描述您要上传的确切图片格式,以便我们试一试,看看会发生什么。

【讨论】:

  • 遗憾的是,这不是罪魁祸首;我正在尝试上传一个非常简单的图像,白色背景上的 2 个红色方块(用油漆制成)用于测试建议。我尝试过使用 jpg、png、bmp 和真实图像。我什至以为我没有 GD 所以我phpinfo'ed 它说我有。
  • 你试过用 imagecopyresampled() 代替吗?正如你所说,我想知道这是否是罪魁祸首;)继续发表评论 - 让我们弄清楚这一点。
  • 我想我已经尝试了我能找到的“所有”图像创建。当我调用 createimage 函数时,我认为问题可能是“文件不在任何地方”。听起来很奇怪,我知道,但我找不到其他解释,因为使用 TimThumb.php 有效,我已经涉足代码,它的操作与我的相同[嗯,更有特色,但仍然如此。]
【解决方案2】:

改变你的

$source = imagecreatefromjpeg($file);

$source = imagecreatefromjpeg($picWhereTo);

这就是你调用函数的方式

$objoflclass->image($_FILES['img']['name'],$_FILES['img']['tmp_name'],'');

其中 $_FILES['img'] 是图片上传字段的名称,我相信您可以从中了解问题所在

【讨论】:

  • 我之前使用过$source = $picWhereTo,但得到了相同的结果,一个空白图像。是的,if ($picinfo = $upload-&gt;image($_FILES['image']['name'],$_FILES['image']['tmp_name'])) 是我的称呼;我不明白。作为临时工。修复我得到了TimThumb.php 拨打电话 - 一旦我有“时间”就会回复它
  • 我测试成功了,然后只有我建议你进行更改。它应该可以工作。
  • 那我一定会尽快重新测试。
猜你喜欢
  • 2013-10-21
  • 1970-01-01
  • 2011-11-06
  • 2012-06-19
  • 2011-03-02
  • 2016-06-09
  • 2011-02-23
  • 2017-01-27
  • 2010-10-06
相关资源
最近更新 更多