美文网首页
php 合并图片及图片失真的解决办法

php 合并图片及图片失真的解决办法

作者: zxwen_zl | 来源:发表于2018-01-08 23:03 被阅读0次

    一、合并图片

    <?php
    ob_clean();
    header('Content-type:image/png');
    //如果遇到问题需要找bug,把header放最后
    /*
        $str = "1\n2\n3\n";
        $im = imagecreate(100,120);
        $white = imagecolorallocate($im,0xFF,0xFF,0xFF);
        imagecolortransparent($im,$white);  //imagecolortransparent() 设置具体某种颜色为透明色,若注释
        $black = imagecolorallocate($im,0x00,0x00,0x00);
         
        imagettftext($im,15,0,50,40,$black,"simkai.ttf",$str); //字体设置部分linux和windows的路径可能不同
        header("Content-type:image/png");
        imagepng($im);//文字生成的图片
    */
    
    
    //人物
    $path_1 = "1.jpg";
    //装备图片
    $path_2 = "2.jpg";
    
    //将人物和装备图片分别取到两个画布中
    $image_1 = imagecreatefromjpeg($path_1);
    $image_2 = imagecreatefromjpeg($path_2);
    
    //创建一个和人物图片一样大小的真彩色画布(ps:只有这样才能保证后面copy装备图片的时候不会失真)
    $image_3 = imageCreatetruecolor(imagesx($image_1),imagesy($image_1));
    
    //为真彩色画布创建白色背景,再设置为透明
    $color = imagecolorallocate($image_3, 1000, 1000, 1000);//此处3个1000可以使背景设为白色,3个255可以使背景变成透明色
    
    imagefill($image_3, 0, 0, $color);
    imageColorTransparent($image_3, $color);
    
    //首先将人物画布采样copy到真彩色画布中,不会失真
    imagecopyresampled($image_3,$image_1,0,0,0,0,imagesx($image_1),imagesy($image_1),imagesx($image_1),imagesy($image_1));
    
    //再将装备图片copy到已经具有人物图像的真彩色画布中,同样也不会失真
    imagecopymerge($image_3,$image_2, 0,780,0,0,imagesx($image_2),imagesy($image_2), 100);
    
    //将画布保存到指定的文件
    // imagejpeg($image_3,'./123.jpg');
    imagepng($image_3,'./123.jpg');
    

    二、在用PHPCMS的thumb函数时,JPG图片变化大小后,质量会下降很多。
    经研究,是PHP的imagejpeg函数的问题,最后修改此函数为imagepng后,问题得以解决。

    相关文章

      网友评论

          本文标题:php 合并图片及图片失真的解决办法

          本文链接:https://www.haomeiwen.com/subject/levinxtx.html