先放代码。

public function mergeImage( $path_1, $path_2 )

{

$img = imagecreatefromstring(file_get_contents($path_1));

$image_2 = imagecreatefrompng($path_2);

//imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )---拷贝并合并图像的一部分

//将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。两图像将根据 pct 来决定合并程度,其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为 100 时对于调色板图像本函数和 imagecopy() 完全一样,它对真彩色图像实现了 alpha 透明。

imagecopymerge($img, $image_2, 0, 0, 0, 0, imagesx($image_2), imagesy($image_2), 100);

return $img;

}

这是将两张图片合成到一起。$path_1 是背景图,$path_2是动态图片

public function addTextToImage( $img, $text1, )

{

$font = '../JDJH.ttf';//字体

$white = 255; //字体颜色,255对应的白色

$fontSize = 80; //字体大小

$circleSize = 0; //旋转角度

$left = 50; //左边距

$top = 100; //顶边距

imagefttext($img, $fontSize, $circleSize, $left, $top, $white, $font, $text1);

return $img;

}

这是在图片上添加文字,要注意的有

1.

imagefttext()

这个方法是使用PHP的GD库的,如果这个方法不能使用的话,看下GD库是否启用,以及GD库中freetype是否启用。

2.字体文件是需要自己下载的

3.$img 是已经实例化的图片,不是图片路径。实例化方法

imagecreatefrompng()

因为我们的图片需要打印,这样生成的图片是72像素,打印出来并不清晰,所以需要改变图片的分辨率。

参考了这篇博文

public function changeResolution( $img, $path_2 )

{

imagepng($img, $path_2);

imagedestroy($img);

$filename = $path_2;

$file = file_get_contents($filename);

//数据块长度为9

$len = pack("N", 9);

//数据块类型标志为pHYs

$sign = pack("A*", "pHYs");

//X方向和Y方向的分辨率均为300DPI(1像素/英寸=39.37像素/米),单位为米(0为未知,1为米)

$data = pack("NNC", 300 * 39.37, 300 * 39.37, 0x01);

//CRC检验码由数据块符号和数据域计算得到

$checksum = pack("N", crc32($sign . $data));

$phys = $len . $sign . $data . $checksum;

$pos = strpos($file, "pHYs");

if ($pos > 0) {

//修改pHYs数据块

$file = substr_replace($file, $phys, $pos - 4, 21);

} else {

//IHDR结束位置(PNG头固定长度为8,IHDR固定长度为25)

$pos = 33;

//将pHYs数据块插入到IHDR之后

$file = substr_replace($file, $phys, $pos, 0);

}

file_put_contents($path_2,$file); //将字符串保存成图片格式 }这样所有我们需要的图片处理都完成了,接下来,可以根据个人业务需求,输出图片

//输出图片

list($dst_w, $dst_h, $dst_type) = getimagesize($dst_path);

switch ($dst_type) {

case 1://GIF

header('Content-Type: image/gif');

imagegif($dst);

break;

case 2://JPG

header('Content-Type: image/jpeg');

imagejpeg($dst);

break;

case 3://PNG

header('Content-Type: image/png');

imagepng($dst);

break;

default:

break;

}

或者使用

imagegif($dst,$file); //$file 文件保存路径,png,jpg同理

保存图片。

因为我们要实现下载多张图片,采用将图片打包压缩

public function zipImage( $array, $storeid )

{

//这里需要注意该目录是否存在,并且有创建的权限

$zipname = '../attachment/images/1/' . $storeid . '.zip';

//这是要打包的文件地址数组

$files = $array;

$zip = new ZipArchive();

$res = $zip->open($zipname, ZipArchive::CREATE);

if ($res === TRUE) {

foreach ($files as $file) {

//这里直接用原文件的名字进行打包,也可以直接命名,需要注意如果文件名字一样会导致后面文件覆盖前面的文件,所以建议重新命名

$new_filename = substr($file, strrpos($file, '/') + 1);

$zip->addFile($file, $new_filename);

}

//关闭文件

$zip->close();

}

return $zipname;

}

public function downZIP( $zipname )

{

//这里是下载zip文件

header("Content-Type: application/zip");

header("Content-Transfer-Encoding: Binary");

header("Content-Length: " . filesize($zipname));

header("Content-Disposition: attachment; filename=\"" . basename($zipname) . "\"");

readfile($zipname);

exit;

}如果单张下载就没必要打包了。

php 背景图片上加载设备状态,PHP 将动态图片与固定背景图片合成并添加水印。...相关推荐

  1. 图片懒加载的原理和实现

    一,前置知识 1,为什么要图片懒加载 懒加载是一种对网页性能优化的方式,比如当访问一个页面的时候,优先显示可视区域的图片而不是一次性加载所有图片,当需要显示时,再发送图片请求,避免打开网页时加载过多资 ...

  2. android调用h5预加载图片,图片预加载 preload

    图片预加载 HTML5学堂:2014年年初的时候,曾经在自己的博客"独行冰海"里写过关于图片预加载和懒加载的博文,当时的文章当中没有写什么关于预载的代码范例,当前打算把预载和懒载分 ...

  3. 图片预加载与图片懒加载

    图片预加载与图片懒加载 图片预加载 图片预加载主要是针对非icon类图片. 加载快,有良好的用户体验. 提前加载图片,当用户需要查看时可直接从本地缓存中渲染.可能因为图片很大,浏览器显示出它会用很长的 ...

  4. python2和python3实现在图片上加汉字

    文章目录 Python2 在图片上加汉字代码实现 Python3 在图片上加汉字代码实现 遇到的问题 python2和python3实现在图片上加汉字,最主要的区别还是内部编码方式不一样导致的,在代码 ...

  5. 如何在图片上加水印?只要四个步骤

    如何在图片上加水印?大家平时都是用什么方法在图片上添加水印的?其实现在给图片添加水印的方法还是有很多的,在网上能够找到不少的教程,但是真正操作简单又好用的方法并不多.就拿最常见的ps给图片加水印的方法 ...

  6. 一个常用的自定义弹框封装(适配 AndroidX),加载 ProgressDialog,状态显示的 StatusDialog 和自定义 Toast,全部支持背景颜色,圆角,边框和文字的自定义,构建者模

    MNProgressHUD 项目地址:maning0303/MNProgressHUD  简介: 一个常用的自定义弹框封装(适配 AndroidX),加载 ProgressDialog,状态显示的 S ...

  7. 问题1.“程序兼容性助手:无法在此设备上加载驱动程序” ——【“Usb-blaster”、“Hardlock.sys”】。问题2.“关闭内存完整性 后电脑开机一直循环重启,进不去window系统”

    题目呈现的两个问题的环境背景是 戴尔笔记本.win11系统: 问题1:显示"程序兼容性助手:无法在此设备上加载驱动程序" . 在网上看了很多方案,好几个方案都是 win+r  →  ...

  8. 记一次灰度发版打印背景图片无法加载的处理过程

    记一次灰度发版打印背景图片无法加载的处理过程 前言 需求为给订单加上新的打印模板,测试环境正常,灰度环境打印不出来图片.请求服务器路径可以展示图片,使用lodop设置背景图或打印图片都无法展示 解决过 ...

  9. 一个页面上有大量的图片,加载很慢,你有哪些方法优化这些图片的加载?

    一个页面上有大量的图片,加载很慢,你有哪些方法优化这些图片的加载? 1.使用 Sprites 图片技术 它将一个页面涉及到的所有零星图片都包含到一张大图中去,然后利用 CSS 技术展现出来.这样一来, ...

最新文章

  1. 洛谷P4053 [JSOI2007]建筑抢修
  2. 计算机程序水仙花数,水仙花数
  3. 数据结构与算法—递归算法(从阶乘、斐波那契到汉诺塔的递归图解)
  4. poj 1679: The Unique MST【次小生成树】
  5. mybatis简单案例源码详细【注释全面】——Utils层(MybatisUtils.java)
  6. python matplotlib画图遇到的问题——画多个子图
  7. 从零手动实现简易Tomcat
  8. java 链表实现堆栈_用JAVA实现堆栈(链表篇)
  9. Matlab图像处理—锐化滤波器
  10. 地图分幅编号C 语言编程,地图分幅与编号
  11. 计算机桌面倒计时,Mamsds桌面倒计时
  12. html教程转换mp3,kgm转换mp3图文版教程,值得收藏
  13. OA项目之Mybatis多表链接查询
  14. xpath爬取airbnb民宿价格信息,为啥用属性定位不到元素,但是用文本内容模糊匹配却可以
  15. 微信小程序开发—背景图片全屏(无白条)
  16. 个人千元奖励!华秋PCB多层板设计挑战赛等您参与
  17. 码云果园:术后人群怎么吃水果
  18. {电脑救助站}常用知识3
  19. [Bash]LeetCode195. 第十行 | Tenth Line
  20. GeneXus中如何使用聊天机器人

热门文章

  1. 武汉市公交老年卡在什么地方可以年检
  2. 问题 B: 加油站(贪心+模拟)
  3. MySQL 8.0 OCP(1Z0-908)中文题库解析
  4. KEIL5 MDK编译后出现.\Output\led.axf: Error: L6218E: Undefined symbol SystemInitreferred from startup_解决方案
  5. 神策数据微信小程序 SDK 功能介绍 | 数据采集
  6. 【Android Studio】关于cvc-complex-type.2.4.a: ‘base-extension‘ {layoutlib} 正确解法
  7. OpenCV学习(二)---树莓派上安装opencv
  8. 反斜杠加3个数字是什么编码?JAVA转义序列、转义字符汇总。
  9. 今天说说构建工具 depot_tools
  10. C Prime Plus 第二章 C语言概述