一,常用图片格式的结束标志是什么?

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图片是否损坏)的更多相关文章

  1. Java使用URL类下载的图片不完整

    问题 今天在使用URL类来下载网站中的图片的时候,出现了一个问题:下载的图片不完整,并且每次下载的图片大小也不是都相同,反正就是不完整. 问题代码如下: package cn.ganlixin.tes ...

  2. 【5】TensorFlow光速入门-图片分类完整代码

    本文地址:https://www.cnblogs.com/tujia/p/13862364.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...

  3. 利用php获取图片完整Exif信息类 获取图片详细完整信息类

    <?php /** * @Author: TonyLevid * @Copyright: TonyLevid.com * @Name: Image Exif Class * @Version: ...

  4. JS检查当图片不存在时显示默认图片和键盘大小写键状态

    当图片不存在时显示默认图片 <script type="text/javascript"> var imgs = document.images; for(var i ...

  5. C# 图片的裁剪,两个图片合成一个图片

    图片的裁剪,两个图片合成一个图片(这是从网上摘的) /// <summary>         /// 图片裁剪,生成新图,保存在同一目录下,名字加_new,格式1.png  新图1_ne ...

  6. 从web编辑器 UEditor 中单独提取图片上传,包含多图片单图片上传以及在线涂鸦功能

    UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码.(抄的...) UEditor是非常好用的富文 ...

  7. 在viewPager中双指缩放图片,双击缩放图片,单指拖拽图片

    我们就把这个问题叫做图片查看器吧,它的主要功能有: (项目地址:https://github.com/TZHANHONG/ImageViewer/releases/tag/1.0,里面的MyImage ...

  8. 阿里云使用js 实现OSS图片上传、获取OSS图片列表、获取图片外网访问地址(读写权限私有、读写权限公共);

    详情请参考:https://help.aliyun.com/document_detail/32069.html?spm=a2c4g.11186623.6.763.ZgC59a 或者https://h ...

  9. img只显示图片一部分 或 css设置背景图片只显示图片指定区域

    17:14 2016/3/22img只显示图片一部分 或 css设置背景图片只显示图片指定区域 background-position: 100% 56%; 设置背景图片显示图片的哪个坐标区域,图片左 ...

随机推荐

  1. Java-Collection和Map

    创建博客的目的主要帮助自己记忆和复习日常学到和用到的知识:或有纰漏请大家斧正,非常感谢! 之前面试,被问过一个问题:List和Set的区别. 主要区别很明显了,两者都是数组形式存在的,继承了Colle ...

  2. 吴恩达《深度学习》-第三门课 结构化机器学习项目(Structuring Machine Learning Projects)-第一周 机器学习(ML)策略(1)(ML strategy(1))-课程笔记

    第一周 机器学习(ML)策略(1)(ML strategy(1)) 1.1 为什么是 ML 策略?(Why ML Strategy?) 希望在这门课程中,可以教给一些策略,一些分析机器学习问题的方法, ...

  3. centos下安装mongodb和php的mongo扩展

    安装MongoDB 1.下面安装MongoDB,先下载: cd /usr/src wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2 ...

  4. PHP实现Restful风格的API(转)

    Restful是一种设计风格而不是标准,比如一个接口原本是这样的: http://www1.qixoo.com/user/view/id/1表示获取id为1的用户信息,如果使用Restful风格,可以 ...

  5. Charles介绍及配置

    Charles 目录 Charles 1.先介绍一下Charles 2.缺少一点配置,需要配置一下 3.接下来就到安装证书了 重新打开一下,证书就安装成功了 这个是下载破解包的地址哦,可以选择版本 1 ...

  6. java面试题2-自己整合的

    1.HashMap的底层实现原理 HashMap是数组+链表组成的实现了Map.Cloneable.Serializable接口,继承了AbstractMap类 HashMap是否线程安全? Hash ...

  7. 使用监听器来启动spring -------使用监听器初始化上下文参数

    问题: 数据初始化监听器要注入spring容器的对象,必须先启动spring容器才能使用监听器初始化数据. 解决: 使用监听器来启动spring框架 问题:spring框架启动需要哪些参数? 1.需要 ...

  8. gerrit安装配置记录

    gerrit安装配置 java -jar gerrit-2.13.5.war init -d gerrit Authentication method [OPEN/?]: htt Install Ve ...

  9. Lyndon Word相关

    Lyndon Word 定义 对于字符串 \(S\),若 \(S\) 的最小后缀为其本身,那么称 \(S\) 为 \(\text{Lyndon}\) 串(\(\text{Lyndon Word}\)) ...

  10. 033 01 Android 零基础入门 01 Java基础语法 03 Java运算符 13 运算符和表达式知识点总结

    033 01 Android 零基础入门 01 Java基础语法 03 Java运算符 13 运算符和表达式知识点总结 本文知识点:运算符和表达式知识点总结 前面学习的几篇文都是运算符和表达式相关的知 ...