今天遇到⼀个问题:
使用delphi打开C#存储生成的Jpeg格式的二维码图形文件居然⽆法正确读取。但是双击该图形文件却能正确读取图像的。
跟踪调试进去,发现是读取⽂件头后发现格式不对,所以delphi没有继续读了,报错!
⽤UEdit打开⼀看,发现png字样,发现原来这个“Jpeg”其实是png格式的图像⽂件。
之后测试了下,发现现在的图像编辑软件对后缀是宽容的。也就说明它们不是根据后缀来判断图像格式的。通过⽤UE打开BMP/JPEG/PNG/GIF四种格式的⽂件。
我们发现了⼀些规律,可以根据这些规律简单判断图像的真正格式。
-
BMP:
以"BM"开头,也就是⽂件0x00位置是ascII的'B',0x01位置是ascII的'M' - JPEG: 0x06-0x09 "JFIF"
- GIF: 0x00-0x02 "GIF"
- PNG: 0x01-0x03 "PNG"
安装pngimage控件,调用显示出png图像。
procedure TForm1.Button3Click(Sender: TObject);
var
Stream:TMemoryStream;
Jpg:TjpegImage;
Png: TPngObject;
begin
Png := TPngObject.Create;
try
Png.LoadFromFile('D:\\ST80_Print_JPG\\1552458000.jpeg');
image1.Picture.Assign(Png);
finally
Png.Free;
end;
end;
网友评论