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

一、合并图片

<?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后,问题得以解决。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,353评论 25 708
  • php面试题及答案(转载)收藏 基础题: 1.表单中 get与post提交方法的区别? 答:get是发送请求HTT...
    积_渐阅读 1,691评论 0 37
  • 基本命令 win+R打开命令行,cmd进DOS窗口DOS命令开启关闭Apache和MysqlApache启动关闭命...
    Wizey阅读 654评论 3 5
  • 我不是一个“狠心”的人,除非某些人真的做了触碰底线的事情,那不好意思,您走好不送。读了这么多年书,不敢说交了多少知...
    远方_先生阅读 1,516评论 10 20
  • 字典序全排列:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一...
    BigBig_Fish阅读 243评论 0 0