gpt4 book ai didi

c# - 从 JPEG 读取 EXIF 缩略图

转载 作者:太空宇宙 更新时间:2023-11-03 10:42:41 25 4
gpt4 key购买 nike

我需要一种高效的方法来从 jpg 文件中提取缩略图,而无需读取整个文件。

我写了这个方法,它应该能很好地工作 - 但它没有。无法读取新文件。我的错误在哪里?

public static System.Drawing.Image GetThumbnail(string Image)
{
try
{
List<byte> image = new List<byte>();
byte[] _startToken = new byte[2] { 0xFF, 0xD8 }; //JPEG Start
byte[] _endToken = new byte[2] { 0xFF, 0xD9 }; //JPEG End
byte[] buff = new byte[2];
FileStream fs = new FileStream(Image, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
while (br.BaseStream.Position < br.BaseStream.Length)
{
byte bCurrent = br.ReadByte();
buff[0] = buff[1];
buff[1] = bCurrent;
if (Enumerable.SequenceEqual(buff, _startToken))
{
image.Clear();
image.AddRange(buff);
};
if (Enumerable.SequenceEqual(buff, _endToken))
{
break;
};
image.Add(bCurrent);
}
return (Bitmap)((new ImageConverter()).ConvertFrom(image.ToArray()));
}
catch
{
return null;
}
}

最佳答案

整个 JPEG 文件位于 FFD8 - FFD9 字节内,而不仅仅是缩略图,因此您获得的代码将复制整个文件。如果您检查 image.jpg 和 thumbnail.jpg 的确切大小,您应该会看到这一点。

但是,由于 Image.Clear,您丢失了第一个字节,然后 break 导致您丢失了最后一个字节。

您需要根据 JPEG 结构实际解析文件才能可靠地提取缩略图。我没用过,但您可能会发现采用 existing library 更容易.

关于c# - 从 JPEG 读取 EXIF 缩略图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24780250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com