本文告诉大家如何在 UWP 中,保存图片的时候,写入 Exif 信息,也就是如照片的 相机型号 制造商 光圈值等信息的写入

在 UWP 中,保存图片或照片需要用到图片编码器,在使用编码器写入前可以设置编码器写入图片的属性,此时就可以包含了 Exif 信息。关于啥是 Exif 信息,还请自行百度

不同的图片格式可以支持的 Exif 信息范围不相同,咱以下使用 jpg 图片作为例子。如果大家切换为其他图片格式,还请自行测试一下

在创建编码器可以在构造函数传入参数,通过参数设置一些 Exif 信息,如质量信息。下面代码在创建时传入质量信息

                BitmapPropertySet propertySet = new BitmapPropertySet();BitmapTypedValue qualityValue = new BitmapTypedValue(0.77, PropertyType.Single);propertySet.Add("ImageQuality", qualityValue);var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, pngStream.AsRandomAccessStream(), propertySet);

上面代码的 pngStream 是一个文件,用于写入图片,这部分代码不是本文重点,如果要获取全部的代码,还请到本文最后获取代码

在创建完成编码器之后,依然可以再次设置图片信息,通过调用 encoder.BitmapProperties.SetPropertiesAsync 方法进行设置

如以下代码,设置作者信息

                var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, pngStream.AsRandomAccessStream(), propertySet);propertySet = new BitmapPropertySet();// 作者propertySet.Add("System.Author", new BitmapTypedValue("lindexi", PropertyType.String));await encoder.BitmapProperties.SetPropertiesAsync(propertySet);

写入之后,可以右击图片文件的属性,进入详细信息。在详细信息里面可以看到图片的信息

以上有一个问题是,能写入属性有哪些,写入的类型是什么?这些可以从 官方文档 获取

如官方文档里面说写入相机型号的描述如下

propertyDescriptionname = System.Photo.CameraManufacturershellPKey = PKEY_Photo_CameraManufacturerformatID = 14B81DA1-0135-4D31-96D9-6CBFC9671A99propID = 271SearchInfoInInvertedIndex = trueIsColumn = truetypeInfotype = String

以上的含义就是写入的 Key 是 System.Photo.CameraManufacturer 要求传入的类型是 PropertyType.String 字符串,根据这个即可了解如何写以上的代码。如写入相机型号的描述等代码如下

                var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, pngStream.AsRandomAccessStream(), propertySet);// https://docs.microsoft.com/en-us/windows/win32/properties/windows-properties-system?WT.mc_id=WD-MVP-5003260propertySet = new BitmapPropertySet();// 作者propertySet.Add("System.Author", new BitmapTypedValue("lindexi", PropertyType.String));// 相机型号propertySet.Add("System.Photo.CameraModel", new BitmapTypedValue("lindexi", PropertyType.String));// 制造商propertySet.Add("System.Photo.CameraManufacturer", new BitmapTypedValue("lindexi manufacturer", PropertyType.String));// 光圈值 System.Photo.FNumberNumerator/System.Photo.FNumberDenominatorpropertySet.Add("System.Photo.FNumberNumerator", new BitmapTypedValue(1, PropertyType.UInt32));propertySet.Add("System.Photo.FNumberDenominator", new BitmapTypedValue(10, PropertyType.UInt32));await encoder.BitmapProperties.SetPropertiesAsync(propertySet);

下面代码是在加载页面,然后进行截图,保存截图到本地文件的代码

        public MainPage(){this.InitializeComponent();Loaded += MainPage_Loaded;}private async void MainPage_Loaded(object sender, RoutedEventArgs e){await Task.Delay(TimeSpan.FromSeconds(1));var renderTargetBitmap = new RenderTargetBitmap();await renderTargetBitmap.RenderAsync(Grid);var pngFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(Path.GetRandomFileName() + ".jpg");using (var pngStream = await pngFile.OpenStreamForWriteAsync()){BitmapPropertySet propertySet = new BitmapPropertySet();BitmapTypedValue qualityValue = new BitmapTypedValue(0.77, PropertyType.Single);propertySet.Add("ImageQuality", qualityValue);var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, pngStream.AsRandomAccessStream(), propertySet);// https://docs.microsoft.com/en-us/windows/win32/properties/windows-properties-system?WT.mc_id=WD-MVP-5003260propertySet = new BitmapPropertySet();// 作者propertySet.Add("System.Author", new BitmapTypedValue("lindexi", PropertyType.String));// 相机型号propertySet.Add("System.Photo.CameraModel", new BitmapTypedValue("lindexi", PropertyType.String));// 制造商propertySet.Add("System.Photo.CameraManufacturer", new BitmapTypedValue("lindexi manufacturer", PropertyType.String));// 光圈值 System.Photo.FNumberNumerator/System.Photo.FNumberDenominatorpropertySet.Add("System.Photo.FNumberNumerator", new BitmapTypedValue(1, PropertyType.UInt32));propertySet.Add("System.Photo.FNumberDenominator", new BitmapTypedValue(10, PropertyType.UInt32));await encoder.BitmapProperties.SetPropertiesAsync(propertySet);var pixelBuffer = await renderTargetBitmap.GetPixelsAsync();var softwareBitmap = SoftwareBitmap.CreateCopyFromBuffer(pixelBuffer, BitmapPixelFormat.Bgra8, renderTargetBitmap.PixelWidth, renderTargetBitmap.PixelHeight);encoder.SetSoftwareBitmap(softwareBitmap);await encoder.FlushAsync();softwareBitmap.Dispose();}await Launcher.LaunchFolderAsync(ApplicationData.Current.TemporaryFolder);}

本文代码可以到 写入图片Exif信息.7z-CSDN 下载

本文上面代码放在 github 和 gitee 欢迎访问

可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码

git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin acdca3ea99682d6549cf2622fb96685531ab9ded

以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源

git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git

获取代码之后,进入 KechinabeleenalLechefahar 文件夹

我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

如有不方便在博客评论的问题,可以加我 QQ 2844808902 交流


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

UWP 写入图片 Exif 信息相关推荐

  1. python随机篡改图片exif信息达到修改定位效果

    import piexif from PIL import Image import random def change_gps(im):exif_dict = piexif.load(im.info ...

  2. Android--操作图片Exif信息

    承香墨影 Android--操作图片Exif信息 前言 在Android系统中,图片文件在内存中以像素点的二维数组加载,存放像素信息,还会在开头加上一些额外的照片拍摄参数信息,这些信息就是Exif.A ...

  3. Android:操作图片Exif信息

    什么是Exif 先来了解什么是Exif.Exif是一种图像文件格式,它的数据存储于JPEG格式是完全相同的,实际上Exif格式就是JPEG格式头插入了数码照片的信息,包括拍摄的光圈.快门.平衡白.IS ...

  4. python图片解析库_python用来获得图片exif信息的库实例分析

    本文实例讲述了python用来获得图片exif信息的库用法.分享给大家供大家参考.具体分析如下: exif-py是一个纯python实现的获取图片元数据的python库,官方下载地址: http:// ...

  5. java exif 语言编码_Java读取图片EXIF信息的代码

    Java读取图片EXIF信息的代码 本文实例讲述了Java读取图片EXIF信息的方法.分享给大家供大家参考.具体分析如下: 首先介绍一下什么是EXIF,EXIF是Exchangeable Image ...

  6. kali中exiftool命令查看图片exif信息

    目录 kali中exiftool查看图片exif信息 1.安装exiftool 2.exiftool的使用 3例:查看图片exif kali中exiftool查看图片exif信息 注:还可以用来生成图 ...

  7. 隐藏表白技能,python教你如何使用图片exif信息隐藏表白,教你如何修改,查询exif信息。

    " 隐藏表白技能" 你有想过一张图片所包含的信息吗?你有想过一张图片可以为你隐藏表达一些内容吗?你有想过图片的隐藏信息可以为你表达你想要说明的东西吗?以及你可以 用图片去表达你的爱 ...

  8. 获取图片Exif信息

    获取图片Exif信息 问题:手机照片上传时,会发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:而Android不会出现这种现象. 原因:ios系统默认Orientation属性为1,与 ...

  9. 【基本的办公软件有哪些】万彩办公大师教程丨图片EXIF信息修改工具

    关于万彩办公大师的图片EXIF信息修改工具 对于智能手机,数码相机拍摄的照片,图片EXIF信息修改工具能够编辑和修改图片的EXIF信息(包括时间,描述等),是各行各业工作人员,特别是摄影师用来编辑记录 ...

  10. java exif 怎么获取属性_Java如何读取图片EXIF信息

    Java如何读取图片EXIF信息 大家知道Java如何读取图片属性信息吗?下面小编为大家整理了Java读取图片EXIF信息的方法,希望能帮到大家! 首先介绍一下什么是EXIF,EXIF是Exchang ...

最新文章

  1. 又是华为!对标 TensorFlow、PyTorch,深度学习框架 MindSpore已开源!附入手公开课...
  2. android matrix 简书,android matrix
  3. JS经典面试题05-变量连续声明var a = b = 1
  4. RabbitMQ—性能测试
  5. effective java ---读书笔记一
  6. opencv java库_【OpenCV】java资源
  7. 聊一聊Jmeter的简单使用
  8. HTML设置字体颜色1008无标题,如何在HTML中设置字体颜色,你知道这几种方式吗?...
  9. Keepalived详解之 - LVS(IPVS)管理工具ipvsadm使用指南
  10. 在Windows10上运行TensorFlow Android Demo实例
  11. Windows 10 下一版本更新代号为“Manganese”
  12. VS2008超有用的快捷键
  13. Flat UI Colors——扁平化配色参考
  14. ubuntu 18.04忘记登录密码的破解方法
  15. oracle分析函数sum() over()
  16. 《黑客攻防技术宝典:系统实战篇(第2版)》目录
  17. 如何在您的香港主机帐户上注册多个域名
  18. 微信小程序——开发介绍
  19. 物联网卡设置_物联网卡这样设置一下上网全程4G!建议收藏!
  20. adobe fonts字体下载

热门文章

  1. Autodesk CAD帮助文档 DXF 图层使用
  2. Sniffer网络监视功能
  3. 有趣的设计模式——两脚插头也能使用三孔插板
  4. python股票回测
  5. 线性充电IC和开关充电IC的区别
  6. java ico图片转png_Java图片处理:ico格式转 PNG/JPG等格式
  7. 【git commit --amend 修改提交记录】
  8. 第22篇-安卓手机端抓包软件VNET介绍
  9. linux网易云打不开的问题
  10. Python函数必须先定义、后调用(函数调用函数例外)