PHP GD拇指质量差

时间:2011-07-21 20:40:32

标签: php resize gd

            $tmp_im = imagecreatetruecolor($width, $height);
            $x = $this->getX();
            $y = $this->getY();

            $w = floor($resize_height * ($x / $y));
            $h = $resize_height;

            $this->tmp_im = imagecreatetruecolor($w, $h);

                            imagealphablending($this->tmp_im, false);
                            imagesavealpha($this->tmp_im, true);

                            imagecopyresampled($this->tmp_im, $this->im, 0, 0, 0, 0, $w, $h, $this->getX(), $this->getY());

            $this->im = $this->tmp_im;


            $hs = floor(($width - $this->getX())/2);
            $vs = floor(($height - $this->getY())/2);

            imagecopy($tmp_im, $this->im, $hs, $vs, 0, 0, $this->getX(), $this->getY());

            $this->im = $tmp_im;

结果是质量不佳的重新调整图像,我做错了什么?我也尝试使用质量= 100

的imagejpeg

1 个答案:

答案 0 :(得分:2)

使用imagecopytruecolor()代替

imagecopy($tmp_im, $this->im, $hs, $vs, 0, 0, $this->getX(), $this->getY());

这是关于official PHP documentation page

的通知
  

由于调色板图像限制(255 + 1种颜色)而出现问题。   重新采样或过滤图像通常需要比255更多的颜色,   一种近似用于计算新的重采样像素   和它的颜色。使用调色板图像,我们尝试分配一种新颜色,如果   失败后,我们选择最接近(理论上)的计算颜色。这是   并不总是最接近的视觉颜色。这可能会产生一个奇怪的结果,   像空白(或视觉空白)图像。请跳过这个问题   使用真彩色图像作为目标图像,例如由其创建的图像   imagecreatetruecolor()。