一,常用圖片格式的結束標志是什么?
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