ImageMagick:用identify检查图片是否完整?(jpg/gif/png图片是否损坏)
一,常用图片格式的结束标志是什么?
1,Jpg格式的文件在16进制中的表示是以 ff d9 两个字节结尾
2, gif格式的文件,结尾是 3b
3, png格式的文件,结尾是 00 00 00 00 49 45 4E 44 AE 42 60 82
说明:我们要用到identify的命令,需要安装ImageMagick
参见这一篇:
https://www.cnblogs.com/architectforest/p/12807514.html
说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest
对应的源码可以访问这里获取: https://github.com/liuhongdi/
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,为什么要查看图片的结束标志?
图片文件在上传过程中受网络情况影响,有可能发生网络中断,
或者处理程序在处理图片时不确定文件是否已上付完成,
图片文件的结束位或结束标志就成为我们检查文件是否完整的标准
三,用linux命令查看图片的结束标志?
1,用xxd命令看一个完整图片的结束标志:
[root@blog html]# xxd a.jpg | tail -2
000041a0: 94ec a491 cc58 b396 354d 8b06 c9b7 6e90 .....X..5M....n.
000041b0: 6922 6997 2294 21f2 bcff d9 i"i.".!....
说明:文件结尾是 ffd9,说明图片文件完整
a.jpg如图:
2,用xxd命令看一个不完整图片的结束标志:
[root@blog html]# xxd b.jpg | tail -2
00002d20: 40a3 ff00 5c67 74f1 5f95 b4df d51e 6b21 @...\gt._.....k!
00002d30: 35e3 5.
说明:文件结尾不是 ffd9,说明图片文件不完整而是已损坏
b.jpg如图:
3,也可以使用od这个命令,还是上面的两张图片,举例如下:
#--endian=big: 指定大端小端以大端方式输出
#-h: 指定以16进制输出
完整图片
[root@blog html]# od --endian=big -h a.jpg | tail -2
0040660 6922 6997 2294 21f2 bcff d900
0040673
损坏图片
[root@blog html]# od --endian=big -h b.jpg | tail -2
0026460 35e3
0026462
四,用identify检查图片是否完整?
1,检查gif是否有损坏?
有损坏的gif
[root@blog img]$ identify -verbose dog.gif | grep corrupt
identify: corrupt image `dog.gif' @ error/gif.c/DecodeImage/513.
identify: corrupt image `dog.gif' @ error/gif.c/ReadGIFImage/1389.
图片如下:
无损坏的gif
[root@blog img]$ identify -verbose dog_tmb.gif | grep corrupt
没有任何输出
图片如下:
2,检查jpg图片是否有损坏?
有损坏的jpg
[root@blog html]$ identify -verbose b.jpg | grep Corrupt
identify: Premature end of JPEG file `b.jpg' @ warning/jpeg.c/JPEGWarningHandler/390.
identify: Corrupt JPEG data: premature end of data segment `b.jpg' @ warning/jpeg.c/JPEGWarningHandler/390.
无损坏的jpg不会输出包含Corrupt字样的信息
五,查看ImageMaigck的版本:
[root@blog html]# identify --version
Version: ImageMagick 6.9.10-86 Q16 x86_64 2020-01-13 https://imagemagick.org
Copyright: 1999-2020 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP(4.5)
Delegates (built-in): bzlib cairo fftw fontconfig freetype gslib gvc jbig jng jp2 jpeg lcms ltdl
lzma openexr pangocairo png ps raqm raw rsvg tiff webp wmf x xml zlib
ImageMagick:用identify检查图片是否完整?(jpg/gif/png图片是否损坏)的更多相关文章
- Java使用URL类下载的图片不完整
问题 今天在使用URL类来下载网站中的图片的时候,出现了一个问题:下载的图片不完整,并且每次下载的图片大小也不是都相同,反正就是不完整. 问题代码如下: package cn.ganlixin.tes ...
- 【5】TensorFlow光速入门-图片分类完整代码
本文地址:https://www.cnblogs.com/tujia/p/13862364.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...
- 利用php获取图片完整Exif信息类 获取图片详细完整信息类
<?php /** * @Author: TonyLevid * @Copyright: TonyLevid.com * @Name: Image Exif Class * @Version: ...
- JS检查当图片不存在时显示默认图片和键盘大小写键状态
当图片不存在时显示默认图片 <script type="text/javascript"> var imgs = document.images; for(var i ...
- C# 图片的裁剪,两个图片合成一个图片
图片的裁剪,两个图片合成一个图片(这是从网上摘的) /// <summary> /// 图片裁剪,生成新图,保存在同一目录下,名字加_new,格式1.png 新图1_ne ...
- 从web编辑器 UEditor 中单独提取图片上传,包含多图片单图片上传以及在线涂鸦功能
UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码.(抄的...) UEditor是非常好用的富文 ...
- 在viewPager中双指缩放图片,双击缩放图片,单指拖拽图片
我们就把这个问题叫做图片查看器吧,它的主要功能有: (项目地址:https://github.com/TZHANHONG/ImageViewer/releases/tag/1.0,里面的MyImage ...
- 阿里云使用js 实现OSS图片上传、获取OSS图片列表、获取图片外网访问地址(读写权限私有、读写权限公共);
详情请参考:https://help.aliyun.com/document_detail/32069.html?spm=a2c4g.11186623.6.763.ZgC59a 或者https://h ...
- img只显示图片一部分 或 css设置背景图片只显示图片指定区域
17:14 2016/3/22img只显示图片一部分 或 css设置背景图片只显示图片指定区域 background-position: 100% 56%; 设置背景图片显示图片的哪个坐标区域,图片左 ...
随机推荐
- Java-Collection和Map
创建博客的目的主要帮助自己记忆和复习日常学到和用到的知识:或有纰漏请大家斧正,非常感谢! 之前面试,被问过一个问题:List和Set的区别. 主要区别很明显了,两者都是数组形式存在的,继承了Colle ...
- 吴恩达《深度学习》-第三门课 结构化机器学习项目(Structuring Machine Learning Projects)-第一周 机器学习(ML)策略(1)(ML strategy(1))-课程笔记
第一周 机器学习(ML)策略(1)(ML strategy(1)) 1.1 为什么是 ML 策略?(Why ML Strategy?) 希望在这门课程中,可以教给一些策略,一些分析机器学习问题的方法, ...
- centos下安装mongodb和php的mongo扩展
安装MongoDB 1.下面安装MongoDB,先下载: cd /usr/src wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2 ...
- PHP实现Restful风格的API(转)
Restful是一种设计风格而不是标准,比如一个接口原本是这样的: http://www1.qixoo.com/user/view/id/1表示获取id为1的用户信息,如果使用Restful风格,可以 ...
- Charles介绍及配置
Charles 目录 Charles 1.先介绍一下Charles 2.缺少一点配置,需要配置一下 3.接下来就到安装证书了 重新打开一下,证书就安装成功了 这个是下载破解包的地址哦,可以选择版本 1 ...
- java面试题2-自己整合的
1.HashMap的底层实现原理 HashMap是数组+链表组成的实现了Map.Cloneable.Serializable接口,继承了AbstractMap类 HashMap是否线程安全? Hash ...
- 使用监听器来启动spring -------使用监听器初始化上下文参数
问题: 数据初始化监听器要注入spring容器的对象,必须先启动spring容器才能使用监听器初始化数据. 解决: 使用监听器来启动spring框架 问题:spring框架启动需要哪些参数? 1.需要 ...
- gerrit安装配置记录
gerrit安装配置 java -jar gerrit-2.13.5.war init -d gerrit Authentication method [OPEN/?]: htt Install Ve ...
- Lyndon Word相关
Lyndon Word 定义 对于字符串 \(S\),若 \(S\) 的最小后缀为其本身,那么称 \(S\) 为 \(\text{Lyndon}\) 串(\(\text{Lyndon Word}\)) ...
- 033 01 Android 零基础入门 01 Java基础语法 03 Java运算符 13 运算符和表达式知识点总结
033 01 Android 零基础入门 01 Java基础语法 03 Java运算符 13 运算符和表达式知识点总结 本文知识点:运算符和表达式知识点总结 前面学习的几篇文都是运算符和表达式相关的知 ...