Grafika 图片合并

Grafika 图片合并后图片会被压缩,压缩比例最大为1/2。比如一张图大小为24kb,图片合并后就成了12kb,请问如何才能不被压缩!

阅读 3.3k
1 个回答

首先感谢看过这个问题的小伙伴!

其次说一下这个问题:

准备工作

  1. 准备一张图比如这张:图1,图片尺寸180X110,图片类型JPEG,图片大小24.38KB
  2. 准备一张待合并图:图2,图片尺寸47X23,图片类型PNG,图片大小1.91KB
    预览:图1图2

开始测试

图片合并的原理:将一张图拷贝到另一张图的制定位置。作用:适用于图片添加水印。

$file = "src/dealimg.jpg";
$file_1 = "src/免费.png";

// 加载水印以及要加水印的图像
$stamp = imagecreatefrompng($file_1);
$im = imagecreatefromjpeg($file);

// 设置水印图像的外边距,并且获取水印图像的尺寸
$marge_right = 0;
$marge_bottom = 0;
$sx = imagesx($stamp);
$sy = imagesy($stamp);


// 利用图像的宽度和水印的外边距计算位置,并且将水印复制到图像上

imagecopy($im, $stamp, 0, 0, 0, 0, imagesx($stamp), imagesy($stamp));

// 输出图像并释放内存
header('Content-type: image/jpeg');
imagejpeg($im, "sssss.jpg", 100);
// imagepng($im, "sssss.png");
imagedestroy($im);

注:上述代码参考自Php官方文档 GD库
效果如下:jpeg效果图

图片属性:图片尺寸180X110,图片类型JPEG,图片大小13.18KB
图片缩小了,为什么呢?
我们看看JPEG的百度百科,其中有这么一句:

  .jpeg/.jpg是最常用的图像文件格式,由一个软件开发联合会组织制定,是一种有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤。尤其是使用过高的压缩比例,将使最终解压缩后恢复的图像质量明显降低,如果追求高品质图像,不宜采用过高压缩比例。

因为,图片保存成jpeg会失真,并被压缩。
我们将处理后的13.18KB的图拿来接着处理,我们看一下效果:
效果如下:二次处理图片

图片属性:图片尺寸180X110,图片类型JPEG,图片大小13.12KB
因为用的同样的算法处理的图片,所以说,第一次处理的和第二次处理的图片大小一致。
我们再看看原图保存为png会怎样?

<?php
/**
 * Created by PhpStorm.
 * User: amor
 * Date: 17-9-18
 * Time: 上午11:26
 */

$file = "src/sssss_1.jpg";
$file_1 = "src/免费.png";

// 加载水印以及要加水印的图像
$stamp = imagecreatefrompng($file_1);
$im = imagecreatefromjpeg($file);

// 设置水印图像的外边距,并且获取水印图像的尺寸
$marge_right = 0;
$marge_bottom = 0;
$sx = imagesx($stamp);
$sy = imagesy($stamp);


// 利用图像的宽度和水印的外边距计算位置,并且将水印复制到图像上

imagecopy($im, $stamp, 0, 0, 0, 0, imagesx($stamp), imagesy($stamp));

// 输出图像并释放内存
//header('Content-type: image/jpeg');
header('Content-type: image/png');
//imagejpeg($im, "sssss_2.jpg", 100);
imagepng($im, "sssss.png");
imagedestroy($im);

预览:png图片

图片属性:图片尺寸180X110,图片类型PNG,图片大小20.35KB
最后,我们得出结论,图片压不压缩,失真与否,取决于图片保存的格式!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题