2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > PHP写入读取图片自定义信息_exif或者什么的?

PHP写入读取图片自定义信息_exif或者什么的?

时间:2018-12-25 19:48:22

相关推荐

PHP写入读取图片自定义信息_exif或者什么的?

后端开发|php教程

PHP写入读取图片自定义信息_exif或者什么的?

后端开发-php教程

PHP 图片

ssh协议 源码,右键vscode,ubuntu 网络问题,tomcat上限,sqlite 得到所有,查询服务器ip有没被,dz首页四格插件,腾讯eb前端框架,爬虫 平台,php社区源码,未名seo,网站右侧导航,美食宣传网页源码,商城类网站模板,wordpress页面显示分类,web文件管理系统 源码,易语言子程序参数lzw

需求描述:

协同办公源码,vscode打开设置,华为管家ubuntu,tomcat找不到bat,sqlite打开聊天记录,爬虫数字字母下划线怎么表示,php 图片等比例缩放,郑州seo优化工资,购物网站html模板,html上传模板lzw

使用PHP对图片文件进行优化处理,但此优化处理只能进行一次,二次进行会对图片造成不可恢复的损坏。期望在图片一次处理之后,在图片文件中写入一个自定义的字符串,什么都行,仅用于判断图片是否经过处理。

android仿源码大全,vscode插件预览不显示,远程访问ubuntu,tomcat设置默认项目, sqlite orm,日本风格网页设计,登录数据库服务器 导出表,空间是服务器吗,插件因为授权验证失败,echarts前端框架,爬虫词条,php zip压缩,外贸seo专员,springboot应用布,dedecms文章描述标签,如何导入旧网站数据库,vb编写网页,静态摄影网站模板,后台导航栏代码,静态页面传递参数 淘宝,.net图书馆信息管理系统,静态博客生成程序lzw

期待可以使用PHP解决。目前想到JPEG格式的话有 EXIF信息,可以尝试从这个作为突破,在EXIF信息中写入一个自定义的字符串。但GIF,PNG,BMP呢,怎么能解决常用的网络图片格式?

google到这货

Imagick::setImageProperty

根据文档/manual/zh/imagick.setimageproperty.php

貌似刚好符合要求,但是使用这个函数保存图片,再次读取却为空,不晓得是不是我的用法有问题

$image = new Imagick($file);$image->setImageProperty(Exif:Make, Imagick);$image->writeImage($file2);$image2 = new Imagick($file2);echo $image->getImageProperty(Exif:Make);

这个是一个思路,但没能实现,真希望是我用法有问题,而不是这个函数不可实现。

又尝试使用 APP13

$size = getimagesize(1.jpg, $info);var_dump($size);if(isset($info[APP13])){ $iptc = iptcparse($info[APP13]); var_dump($iptc);}

但也不行。

难道我一直在走弯路?有什么好的办法吗?要的不多,就是想在不破快图片的基础上在图片数据中写入一个字符串,供下次读取这个字符串。

大大们现身吧,给点指点,解决问题立刻散分。

回复讨论(解决方案)

对于 GD 支持的图片,均可以在图片数据结束后附加自定义数据,而不影响图片的内容

示例代码

$url = http://avatar./0/E/F/1_jaylecn.jpg;$im = imagecreatefromjpeg($url);imagepng($im, est.jpg); //产生一个 png 图片文件$s = abcefg; //待附加的信息file_put_contents( est.jpg, sprintf(\%sInfo%s, $s, pack( , strlen($s))), FILE_APPEND); //按自定义格式附加在图片文件之后//回读$s = file_get_contents( est.jpg);$t = unpack(A4t/noffs, substr($s, -6)); //取回自定义信息的长度$v = substr($s, -6 - $t[offs], -6); //取回自定义信息echo $v;//abcdef

请自行验证图片数据没有被破坏

其实大致有这样一个概念:可以边读取边展示的基本是流式数据,这样的数据,头文件将说明了mimetype和长度(或有结束标志),那么在长度(或结束标志)之后的“额外”数据并不影响主体数据的展示,依此概念,甚至rar、zip等也能做手脚,呵呵

谢谢两位回答,看样子思路是一样的,就是在文件的数据格式之外插入一段字符。

开始也想到过这个办法,手工编辑了一个几个文件,其中有一个GIF动态图插入之后,图片遭到损坏。当时认为这种方法不可行,就没继续深入。我又使用了那张手工修改被破坏的GIF图,用xuzuning的代码测试了一下,竟然是可以的,看来手工修改确实不行。

这个方案看来基本可行了,那么问题就是 我恐怕 没办法去测试所有的图片格式,这种方法是否具有确定性呢?(GD只要支持,就一定没问题?)

PS:我先去测试几种格式的图片试试。

用Imagick类可以实现,需要PHP安装imagemagick扩展模块

我在发帖的时候就已经说了,google到了一个 Imagick 的函数,但实际上是无法写入的,不知道楼上说的用Imagick实现是怎么实现的?

是的,GD 支持的图片都是可以的(gif、jpg、png)

因为此类图片都是压缩保存的,在文件头部都有一个数据区长度的表识。

图片显示时,软件通过该标识读取并解压数据

但对于 GD 不支持的,比如 bmp 文件,就没有那么幸运了。

bmp 的数据是从文件尾向文件头方向排列的,如果你在文件尾部添加内容,就将破坏图片数据

其实最简单的测试方法就是准备你的二进制数据和原始文件,然后用DOS命令

copy /b 原始文件 + 二进制数据 新文件

然后检查这个新文件有没问题

先用这种方案吧,有个PHP类或者什么的,可以兼容各种图片格式就好了。这个需求我觉得倒还挺常见的,比如批量给图片打水印,可以给图片加个属性来判断是否已经水印过了。

结贴,感谢两位

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。