gpt4 book ai didi

c# - 在 C# 中将页脚/EXIF(二进制数据)添加到 JPG 图像

转载 作者:行者123 更新时间:2023-11-30 18:26:33 24 4
gpt4 key购买 nike

大家好,我有一张图片,我想将二进制数据作为页脚添加到该图片。

RGBImage rgbImage =  (RGBImage) RGBImage.LoadImage(@"test.tiff");
byte[] bytes = File.ReadAllBytes(@"C:\TEMP\gili.bin");
int padding =(int) Math.Ceiling((double)bytes.Length/(rgbImage.Width*3));
byte[] newMakerNoteImage = new byte[rgbImage[0].Data.Length + (rgbImage.Width * 3 * padding)];
Buffer.BlockCopy(rgbImage[0].Data, 0, newMakerNoteImage, 0, rgbImage[0].Data.Length);
Buffer.BlockCopy(bytes, 0, newMakerNoteImage, rgbImage[0].Data.Length, bytes.Length);

BitmapPalette myPalette = BitmapPalettes.WebPalette;

// Creates a new empty image with the pre-defined palette
BitmapSource image = BitmapSource.Create(
rgbImage.Width,
rgbImage.Height,
96,
96,
PixelFormats.Bgr24,
myPalette,
newMakerNoteImage,
rgbImage.Width * 3);

FileStream stream = new FileStream(@"C:\TEMP\new.jpg", FileMode.Create);
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.FlipHorizontal = false;
encoder.FlipVertical = false;
encoder.QualityLevel = 30;
encoder.Frames.Add(BitmapFrame.Create(image));
encoder.Save(stream);

图像输出正常,但二进制数据未添加到图像末尾。你能告诉我我做的是否正确吗?

我想我可能看错了,我需要使用 EXIF 才能将这个 makernote 数据添加到图像中。图像的用户不应该看到数据。

最佳答案

这是我经过测试的 EXIF/MakerNote 创建解决方案
据我所知,37500 是 EXIF 中的 makernote 十六进制标记。

http://nicholasarmstrong.com/2010/02/exif-quick-reference/

 public void CreateMakerNoteJpgImage(byte[] makerNoteArray, string path)
{
BitmapPalette myPalette = BitmapPalettes.WebPalette;

// Creates a new empty image with the pre-defined palette
BitmapSource image = BitmapSource.Create(
Width,
Height,
96,
96,
PixelFormats.Bgr24,
myPalette,
_channels[0].Data,
Width * 3);

FileStream stream = new FileStream(path, FileMode.Create);

BitmapMetadata metadata = new BitmapMetadata("jpg");
//adding makernote data into EXIF of the jpeg image
metadata.SetQuery("/app1/ifd/exif:{uint=37500}", makerNoteArray);

JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.FlipHorizontal = false;
encoder.FlipVertical = false;
encoder.QualityLevel = 30;
BitmapFrame frame = BitmapFrame.Create(image, null, metadata, null);
encoder.Frames.Add(frame);
encoder.Save(stream);
}

关于c# - 在 C# 中将页脚/EXIF(二进制数据)添加到 JPG 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28453450/

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