PHP - 创建png拇指给出全黑图片

时间:2016-12-01 10:08:47

标签: php png image-resizing

我遇到了PHP这个问题 我试图用图片制作拇指..它适用于所有类型的图片,除了png(仅给出拇指黑色图片)

这是我制作拇指的代码

function image_resize($src, $dst, $width, $height, $crop = 0)
    {
        if (!list($w, $h) = getimagesize($src))
        {
            $this->return_error("صيغة الملف المرفوعة غير مدعومة !");
            return (false);
        }
        $type = strtolower(substr(strrchr($src, "."), 1));
        if ($type == 'jpeg')
            $type = 'jpg';
        switch ($type)
        {
            case 'bmp':
                $img = imagecreatefromwbmp($src);
                break;
            case 'gif':
                $img = imagecreatefromgif($src);
                break;
            case 'jpg':
                $img = imagecreatefromjpeg($src);
                break;
            case 'png':
                $img = imagecreatefrompng($src);
                break;
            default:
                $this->return_error("عفواً ولكن حدث خطأ أثناء معالجة الصورة المرفوعة");
                return (false);
        }

        // resize
        if ($crop)
        {
            if ($w < $width or $h < $height)
            {
                $this->return_error("مقاس الصورة المرفوعة صغير للغاية");
                return (false);
            }
            $ratio = max($width / $w, $height / $h);
            $h = $height / $ratio;
            $x = ($w - $width / $ratio) / 2;
            $w = $width / $ratio;
        } else
        {
            if ($w < $width and $h < $height)
            {
                $this->return_error("مقاس الصورة المرفوعة صغير للغاية");
                return (false);
            }
            $ratio = min($width / $w, $height / $h);
            $width = $w * $ratio;
            $height = $h * $ratio;
            $x = 0;
        }

        $new = imagecreatetruecolor($width, $height);

        // preserve transparency
        if ($type == "gif" or $type == "png")
        {
            imagecolortransparent($new, imagecolorallocatealpha($new, 0, 0, 0,
                127));
            imagealphablending($new, false);
            imagesavealpha($new, true);
        }

        imagecopyresampled($new, $img, 0, 0, $x, 0, $width, $height, $w, $h);

        switch ($type)
        {
            case 'bmp':
                imagewbmp($new, $dst);
                break;
            case 'gif':
                imagegif($new, $dst);
                break;
            case 'jpg':
                imagejpeg($new, $dst);
                break;
            case 'png':
                imagepng($new, $dst);
                break;
        }
        return true;
    }

除PNG外,所有其他类型的图片都正常工作

0 个答案:

没有答案