当前位置: 首页 > 编程日记 > 正文

win2d 图片水印

win2d 图片水印

本文告诉大家如何使用 win2d 给图片加上水印。

安装

首先需要使用 Nuget 安装 win2d ,安装参见win10 uwp win2d

如果没有更新 dot net core 那么在运行可能会出现下面异常System.TypeLoadException: Requested Windows Runtime type 'Microsoft.Graphics.Canvas.Text.CanvasTextLayout' is not registered

那么直接更新 dot net core 到最新,然后清理项目就可以

获得图片

要对图片处理,首先需要拿到图片,拿到图片的方法可以是从剪贴板获得或者使用文件选取拿到。

如果是从剪贴板拿到图片,需要把图片保存到本地的临时文件夹,然后拿到文件。

如果使用文件选取拿到文件,可以使用这个方法

          var pick = new FileOpenPicker();pick.FileTypeFilter.Add(".jpg");pick.FileTypeFilter.Add(".png"); var file = await pick.PickSingleFileAsync();

注意后缀名用的是 .+后缀名,这里我写的是很少的图片后缀名,实际上可以支持的图片后缀是很多。

创建图片

如果需要对图片处理,使用的是 CanvasRenderTarget ,可以看到这个类需要传入两个参数ICanvasResourceCreatorWithDpiSize,我也就使用这个函数

在 win2d 使用图片需要 CanvasBitmap ,这个类不可以直接创建,需要通过LoadAsyncCreateFromBytesCreateFromColorsCreateFromSoftwareBitmap 这些方法来创建,下面就使用第一个方法创建。

第一个方法有很多重载,需要注意,如果不是解决方案里的文件,千万不要使用文件名或 URI 的方法,因为经常出现文件无法访问。

如果不是解决方案里的文件,千万不要使用 fileName 或 URI 的方法读取图片,因为一般的文件是没有权限。即使使用 FilePick 拿到文件,文件的路径也可能拿不到。

建议使用的方法是使用流的重载,在上面,已经拿到文件,这时把文件读出来,传入就可以

var duvDbecdgiu =await CanvasBitmap.LoadAsync(new CanvasDevice(true), await _file.OpenAsync(FileAccessMode.Read));

处理图片

现在创建 CanvasRenderTarget 处理图片,在使用 CanvasRenderTarget 记得释放,所以一般需要使用下面代码

 using (var canvasRenderTarget = new CanvasRenderTarget(duvDbecdgiu, duvDbecdgiu.Size))

创建一个图片处理,大小就和图片大小相同。

在图片添加文字的方法实际上和在 win2d 的其他处理相同,具体可以去看我的win2d博客。

                using (var dc = canvasRenderTarget.CreateDrawingSession()){dc.DrawImage(duvDbecdgiu);dc.DrawText("lindexi",new Vector2((float) (duvDbecdgiu.Size.Width / 2), (float) duvDbecdgiu.Size.Height/2), Colors.Black); }

也许大家会觉得上面的DrawImage是做什么的,刚才不是从图片创建的?实际上从图片创建,但是没有画图片,也就是在使用的时候需要先画图片,然后画出文字。

保存

现在尝试保存一个图片,保存需要让用户选一个文件

        var pick = new FileSavePicker();pick.FileTypeChoices.Add("image", new List<string>() {".jpg"}); var file = await pick.PickSaveFileAsync();

保存很简单

await canvasRenderTarget.SaveAsync(await file.OpenAsync(FileAccessMode.ReadWrite),CanvasBitmapFileFormat.Jpeg);

注意保存的格式可以是很多,但是后缀名需要和保存的格式相同。

现在这个功能写在图床

欢迎大家访问我搭建的博客 win2d 图片水印 我自己搭建的博客会不断更新

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

相关文章:

【Qt】QtCreator中的单例编程(以ActionManager为例)

1、ActionManager简介 ActionManager类负责注册菜单和菜单项以及键盘快捷键。 ActionManager的公共函数都是静态的,只有使用信号时,才用到单例。 2、ActionManager单例伪代码 头文件中将构造函数和析构函数设置成私有(private),使用instance()函数获取单例 class Acti…

37、C++ Primer 4th笔记,特殊工具与技术,类成员指针

1、成员指针&#xff08;pointer to member&#xff09;包含类的类型以及成员的类型。成员指针只应用于类的非static成员。static类成员不是任何对象的组成部分&#xff0c;所以不需要特殊语法来指向static成员&#xff0c;static成员指针是普通指针。通过指定函数的返回类型&a…

聊一聊javascript执行上下文

跟大家聊聊js的执行上下文 一&#xff0c;相关概念 EC : 执行上下文 ECS : 执行环境栈 VO &#xff1a; 变量对象 AO &#xff1a; 活动对象 scope chain &#xff1a;作用域链 二&#xff0c;执行上下文 javascript运行的代码环境有三种&#xff1a; 全局代码&#xff1a;代码…

【Qt】QtCreator中使用ActionManager类管理标题栏(MunuBar)、菜单(Menu)和菜单中的项目(Action)

1、简介 QtCreator中使用ActionManager类管理标题栏(MunuBar)、菜单(Menu)和菜单中的项目(Action),下面以创建“New”动作为例,介绍ActionManager的使用方法,后续会详细分析ActionManager。 2、创建标题栏(MunuBar) const char MENU_BAR[] = "QtCreator.MenuBar&quo…

和达摩院深度绑定,阿里云下一个十年,成为“云上的阿里巴巴”

参加 2019 Python开发者日&#xff0c;请扫码咨询 ↑↑↑整理 | 非主流出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;2009 &#xff5e; 2019&#xff0c;阿里云已经走过了 10 年时光。在此次的阿里云峰会北京站上&#xff0c;为阿里云的站台的是张建锋。去年 11 月…

如何用TF Object Detection API训练交通信号灯检测神经网络?

参加 2019 Python开发者日&#xff0c;请扫码咨询 ↑↑↑作者简介&#xff1a;申泽邦&#xff08;Adam Shan&#xff09;&#xff0c;谷歌认证机器学习专家&#xff08;Google Developer Expert&#xff09;&#xff0c;兰州大学智能驾驶团队技术负责人&#xff0c;硕士在读。文…

iOS progressive Web App (PWA) 技术

随着 iOS 11.3 的发布&#xff0c;iOS PWA 的时代终于来了&#xff01;本文对 iOS 中 PWA 的能力进行了分析&#xff0c;并将其与 iOS 上的 Native App、Android 上的 PWA 进行了深度对比&#xff0c;是值得收藏的一篇好文。 随着 iOS 11.3 的发布&#xff0c;苹果悄悄的支持了…

VS新建类自动添加版本注释

我们开发的时候习惯在代码顶部加上自己的版权说明。 每次拷贝挺麻烦的&#xff0c;上网查了一下&#xff0c;2003的介绍但不少。但08的模板生成方式好像改变了 后来2005的一篇介绍给了我一点提示。原来模板文件放在common7目录下。 主要分为ProjectTemplates和ItemTemplates&am…

【linux】shell中整数运算的加、减、乘、除

1、使用双括号“(( ))” shell中变量实现加法的方法 d $(($d 2)) 例子如下 #!/bin/bash d0 echo "d$d"for((i1;i<10;i)); do d$(($d 2)) echo "d$d" done unset d((i$j$k)) 等价于 iexpr $j $k ((i$j-$k)) 等价于 iexpr $j -$k ((i$…

简单使用PDO

2019独角兽企业重金招聘Python工程师标准>>> 首先基本配置&#xff1a; 连接MYSQL <?php $dsn mysql:hostlocalhost;dbnameworld;; $user user; $password secret; try { $dbh new PDO($dsn, $user, $password); } catch (PDOException $e) { echo Connecti…

一文看懂模糊搜索1.0到3.0的算法迭代历程

参加 2019 Python开发者日&#xff0c;请扫码咨询 ↑↑↑作者 | 宋广泽责编 | 郭芮来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;前一段时间在Linux上用C语言做了一个信息管理系统&#xff0c;初始版本的搜索就是直接使用了C语言库文件<string.h>里的库函数…

【linux】shell中浮点数运算的加、减、乘、除

bash 不支持浮点运算&#xff0c;如果需要进行浮点运算&#xff0c;需要借助bc,awk 处理。 1、bc #!/bin/bash#加 f$(echo "4.32.5"|bc) echo "4.32.5$f"#减 f$(echo "4.3-2.5"|bc) echo "4.3-2.5$f"#乘 f$(echo "4.30*2.50&qu…

页面加载和解析流程

输入url,浏览器向服务器发出请求&#xff0c;服务器返回html文件&#xff0c;浏览器开始载入html代码&#xff0c;发现head标签有link标签引入外部的css文件&#xff0c;浏览器发出css文件的请求&#xff0c;服务器返回这个css文件&#xff0c;浏览器继续载入body中的代码&…

作为程序员应有10项权利

Scott认为&#xff0c;作为开发人员&#xff0c;应该有权享有以下列表所示的待遇&#xff1b;不过在国内&#xff0c;这个却有点异想天开&#xff0c;能有几个老板愿意给员工如此舒适的环境呢&#xff1f; 1.每位程序员应该拥有一个安静的工作环境 2.每位程序员应该拥有听音乐…

【Qt】QtCreator中自动补全注释

1、简述 在QtCreator中编辑代码,可以自动补全函数注释,供doxygen使用并生成文档。doxygen的使用方法,后续会写一个详细的博文。 2、使用方法 在函数前分别输入“/**”、“/*!”、“//!”、“///”,然后敲击回车键,会自动补全下方函数的注释。 注意:输入的注释一定要紧…

Java内存模型与线程

一、一致性高速缓存的存储交互很好的解决了处理器与内存的速度矛盾&#xff0c;但也存在缓存一致性&#xff08;cache coherence&#xff09;问题二、java内存模型内存模型&#xff1a;对特定的内存或高速缓存进行读写访问的过程抽象。 java内存模型&#xff08;java memory mo…

Google用更少标签生成图像,还提出一个用于训练评估GAN的库

参加 2019 Python开发者日&#xff0c;请扫码咨询 ↑↑↑译者 | 刘畅责编 | 琥珀出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;生成对抗网络&#xff08;GAN&#xff09;是属于一种强有力的深度生成模型。GAN 的主要思想是训练两个神经网络&#xff1a;一个是学习如…

视频用户行为及推荐系统评价KPI-部分

问题 KPI 使用推荐区的用户数量和比率是否显著提升 使用推荐区用户量及其占比与之前进行对比 新老用户使用推荐差异是否明显 新老用户推荐区使用比率占各自类别比&#xff0c;新老用户推荐区产生的VV占各自类别比 推荐区产生的VV占总VV是否显著提升 推荐区VV占总VV占比与…

【linux】用户和组的管理:添加、修改、删除(useradd usermod userdel groupadd groupdel)

一、用户 1、添加 $ useradd -h Usage: useradd [options] LOGINuseradd -Duseradd -D [options]Options:-b, --base-dir BASE_DIR base directory for the home directory of the new account-c, --comment COMMENT 加上备注文字&#xff0c;备注文字保存在pa…

ping命令工具:同时ping多个IP

检测多个ip在同一时间点的响应状态&#xff0c;通过对比来判断哪个ip异常。 下载地址&#xff1a;https://share.weiyun.com/5XCkypG 转载于:https://www.cnblogs.com/leavind/p/8743149.html

顶会论文9篇,又斩获百度奖学金!哈工大NLP“新生代”正崭露头角

参加 2019 Python开发者日&#xff0c;请扫码咨询 ↑↑↑作者 | 琥珀出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;“Static OnePlus”&#xff1f;首次看到这个网名时&#xff0c;激起了笔者不小的兴趣。正如每个网名背后都有一段不一样的故事&#xff0c;Static …

医院数据中心机房建设资料汇总(31篇)

医疗数据中心包括病人基本数据、入出转数据、电子病历、诊疗数据、医学影像数据、医学管理、经济数据&#xff0c;它们围绕着病人这个中心&#xff0c;成为了医 疗信息的主要来源。医疗数据质量的影响表现在医疗数据的实时、近期和远期应用&#xff0c;首先影响医疗信息系统的日…

【linux】CentOS启动后网络自动配置过程

1、启动后如何调用的网络配置脚本 网络配置脚本路径&#xff1a;/etc/init.d/network 根据不同启动级别对network脚本的调用情况&#xff1a; 进入/etc目录后&#xff0c;执行 $ find -name “*network”&#xff0c;结果如下&#xff1a; $ find -name "*network"…

web存储中cookie、session区别

http协议是一种无状态的协议&#xff0c;浏览器对服务器的每一次请求都是独立的。为了使得web能够产生一些动态信息&#xff0c;就需要保存”状态”&#xff0c;而cookie和session机制就是为了解决http协议无状态而产生。cookie是一种在客户端保存状态的方案&#xff0c;sessio…

李沐团队新作Gluon,复现CV经典模型到BERT,简单好用 | 强烈推荐

参加 2019 Python开发者日&#xff0c;请扫码咨询 ↑↑↑责编 | Jane出品 | AI科技大本营&#xff08;公众号id&#xff1a;rgznai100&#xff09;【导语】上周&#xff0c;李沐老师公布 GluonNLP0.6 版本&#xff0c;借助 Apache MXNet&#xff0c;大家可以尝试在 Gluon 中复现…

中国科学技术大学 中科大(USTC)UBUNTU源Linux镜像站IPV4/IPV6

Ubuntu下的使用方法:使用如下命令&#xff1a;sudo gedit /etc/apt/sources.list请编辑/etc/apt/sources.list&#xff0c;用下面的内容替换&#xff1a; deb http://mirrors.ustc.edu.cn/ubuntu/ natty main restricted universe multiverse deb http://mirrors.ustc.edu.cn/…

深度分析蔡徐坤的百万流量数据,揭底哪些是假的!

参加 2019 Python开发者日&#xff0c;请扫码咨询 ↑↑↑作者 | Alfred&#xff0c;毕业于暨南大学&#xff0c;数据挖掘算法工程师&#xff0c;主要研究领域为数据挖掘、机器学习来源 | Alfred数据室&#xff08;公众号id&#xff1a;Alfred_Lab&#xff09;责编 | Jane前段时…

【Linux】延时函数sleep、usleep、nanosleep、select、pselect的比较

1、简介 sleep()-------以秒为单位 #include<unistd.h> unsigned int sleep(unsigned int seconds); return&#xff1a;若进程暂停到参数seconds 所指定的时间&#xff0c;成功则返回0&#xff0c;若有信号中断则返回剩余秒数。 在linux中&#xff0c;sleep是通过nanos…

特斯拉解锁对汽车电池容量的软件限制,以帮助用户逃离飓风危险

为了对抗飓风&#xff0c;为用户提高逃生的可能性&#xff0c;特斯拉公司在此特殊情况下免费释放了电池容量限制。 据悉&#xff0c;在伊斯玛飓风抵达佛罗里达州之前&#xff0c;特斯拉为佛罗里达特斯拉的电动汽车用户更新解锁了其60kwh型号下电动汽车被封住的电池容量&#x…

nginx安装 问题 1

./configure: error: the HTTP rewrite module requires the PCRE library 有时候&#xff0c;我们需要单独安装nginx&#xff0c;来处理大量的下载请求。单独在Centos5安装nginx遇到的rewrite和HTTP cache错误解决办法&#xff1a;wget http://nginx.org/download/nginx-0.8.3…