繁体   English   中英

imagecopyresampled丢失质量图像php

[英]imagecopyresampled lossing quality an image php

我想使用php中的imagecopyresampled复制大小调整合并图像。 它的大小适当调整,但质量下降,或者我可以说其边缘被破坏了,为什么? 下面是我的代码,请查看并提供解决方案。PHPGD-Library。

<?php
  $percent = 1.0;
  $filename ='filepath.png';
  $image_source = imagecreatefrompng($filename);
  list($old_width, $old_height) = getimagesize($filename );
  $width=$old_width;
  $height=$old_height;
  $new_width = $old_width * $percent;
  $new_height = $old_height * $percent;
  $transColor=imagecolorallocatealpha($image_source, 0, 0, 0, 0);
  imagecolortransparent($image_source, $transColor);
  $image_p = imagecreatetruecolor($new_width, $new_height);
  imagecopyresampled($image_p, $image_source, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
  header('Content-Type: image/png');
  imagepng($image_p);
  imagedestroy($image_p);
?>

尝试使用此代码

<?php
$percent = 1.0;
$filename ='filepath.png';
$image_source = imagecreatefrompng($filename);
list($old_width, $old_height) = getimagesize($filename );
$width=$old_width;
$height=$old_height;
$new_width = $old_width * $percent;
$new_height = $old_height * $percent;
$transColor=imagecolorallocatealpha($image_source, 0, 0, 0, 0);
imagecolortransparent($image_source, $transColor);
$image_p = imagecreatetruecolor($new_width, $new_height);
imagealphablending($image_p, false);
imagesavealpha($image_p, true);
imagecopyresampled($image_p, $image_source, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
header('Content-Type: image/png');
imagepng($image_p);
imagedestroy($image_p);
?>

下面的代码对我有用,您可以根据需要自定义:

function textOutWithStroke($textSize, $textAngle, $x, $y, $textColor, $textFont, $text, $strokeColor = null, $borderSize = 1, $spacing = 0) {
if ($this->isImageCreated()){
    imagealphablending($this->handle, true);
    $textColor = imagecolorallocatealpha($this->handle, $textColor[0], $textColor[1], $textColor[2], $textColor[3]);
    if($strokeColor === null)
        $strokeColor = $textColor;
    else
        $strokeColor = imagecolorallocatealpha($this->handle, $strokeColor[0], $strokeColor[1], $strokeColor[2], $strokeColor[3]);

    if ($borderSize < 1){
        if ($spacing == 0)
            imagettftext($this->handle, $textSize, $textAngle, $x, $y, $textColor, $textFont, $text);
        else{
            for ($i = 0; $i < strlen($text); $i++) {
                $letterBox = imagettftext($this->handle, $textSize, $textAngle, $x, $y, $textColor, $textFont, $text[$i]);
                $x += $spacing + ($letterBox[2] - $letterBox[0]);
            }
        }
    }
    else{
        if ($spacing == 0) {
            for ($c1 = $x - $borderSize; $c1 <= $x + $borderSize; $c1++)
                for ($c2 = $y - $borderSize; $c2 <= $y + $borderSize; $c2++)
                    imagettftext($this->handle, $textSize, $textAngle, $c1, $c2, $strokeColor, $textFont, $text);

            imagettftext($this->handle, $textSize, $textAngle, $x, $y, $textColor, $textFont, $text);
        }
        else{
            for ($i = 0; $i < strlen($text); $i++) {
                for ($c1 = $x - $borderSize; $c1 <= $x + $borderSize; $c1++)
                    for ($c2 = $y - $borderSize; $c2 <= $y + $borderSize; $c2++)
                        imagettftext($this->handle, $textSize, $textAngle, $c1, $c2, $strokeColor, $textFont, $text[$i]);

                $letterBox = imagettftext($this->handle, $textSize, $textAngle, $x, $y, $textColor, $textFont, $text[$i]);
                $x += $spacing + ($letterBox[2] - $letterBox[0]) + (2 * $borderSize);
            }
        }


    }
    imagealphablending($this->handle, $this->alphaBlending);
    return true;
}
else
    return false;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM