2018-12-25-win2d-图片水印
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
win2d 图片水印
|
lindexi
|
2018-12-25 10:37:52 +0800
|
2018-03-19 08:37:34 +0800
|
水印 win2d UWP 渲染
|
本文告诉大家如何使用 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 ,可以看到这个类需要传入两个参数ICanvasResourceCreatorWithDpi,Size,我也就使用这个函数
在 win2d 使用图片需要 CanvasBitmap ,这个类不可以直接创建,需要通过LoadAsync、CreateFromBytes、CreateFromColors、CreateFromSoftwareBitmap 这些方法来创建,下面就使用第一个方法创建。
第一个方法有很多重载,需要注意,如果不是解决方案里的文件,千万不要使用文件名或 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);
注意保存的格式可以是很多,但是后缀名需要和保存的格式相同。
现在这个功能写在图床
2018-12-25-win2d-图片水印的更多相关文章
- win2d 图片水印
本文告诉大家如何使用 win2d 给图片加上水印. 安装 首先需要使用 Nuget 安装 win2d ,安装参见win10 uwp win2d 如果没有更新 dot net core 那么在运行可能会 ...
- 2018.12.25 SOW
1. Understanding Customer Requirements 11.1. Project Overview 21.2. System Requirements 21.3. Indust ...
- 2018.12.25 Spring中JDBCTemplate模版API学习
1 Spring整合JDBC模版 1.1 spring中土拱了一个可以操作数据库的对象.对象封装了jdbc技术 JDBCTemplateJDBC模板对象 1.2 与DBUtils中的QueryRunn ...
- 12.25模拟赛T1
可以区间dp,但是复杂度太高. 所以应该是贪心,怎么贪心呢? 这种题目,最好还是手玩找一些规律. 可以发现,由于保证可以m次填完,所以颜色之间没有相互包含关系. 比较像分治的模型. 所以考虑拿到一个区 ...
- Swift - 给图片添加图片水印(图片上绘制另一张图,并可设透明度)
我前面写了篇文章讲解如何给图片添加文字水印,而如果想要添加图片类型的水印也很简单,只要把原来代码里添加文字的部分改成图片即可. 1,效果图如下: (在图片左上角添加了一个半透明的logo图片) 2,为 ...
- C#图片水印代码整理
这一段公司有个项目,客户要求上传的图片要带上自定义的水印.以前也经常和朋友讨论C#图片水印方面的问题,但是从来没有实际操作过.所以,借这次项目的机会也研究了一下C#图片水印的功能!本人参考的是disc ...
- 开发笔记:PDF生成文字和图片水印
背景 团队手里在做的一个项目,其中一个小功能是用户需要上传PDF文件到文件服务器上,都是一些合同或者技术评估文档,鉴于知识版权和防伪的目的,需要在上传的PDF文件打上水印, 这时候我们需要提供能力给客 ...
- PHP 文字,图片水印,缩略图,裁切成小图(大小变小)
文字水印基本思路:1.用getimagesize()获取图片的信息(as:大小,属性等):2.根据图片信息用imagecreatefromjpeg ()/imagecreatefromgif/imag ...
- GD库 图片缩略图 图片水印
/** * GD库 图片缩略图 *//*$image = imagecreatefromjpeg("1.jpg");var_dump($image);exit;$width = i ...
- PDF怎么添加文字水印与图片水印
现在是个知识分享时代,但不可避免的盗版也无处不在,不知道在我们大家身边有没有遇到过这样的情况:自己煞费苦心制作的PDF文档不知道在什么时候就会被别人给盗用了,那么如何才能尽量避免这个问题呢?今天带大家 ...
随机推荐
- Git --05 Gitlab使用
目录 Gitlab使用 01. 外观配置 02. Gitlab汉化配置 03. 注册限制 04. 创建用户及组 05. 创建用户 06. 把用户添加到组 07. 创建项目 08. 推送代码到Gitla ...
- lik模糊e查询语句,索引使用效果详解
一.like查询与索引 在oracle里的一个超级大的表中,我们的where条件的列有建索引的话,会走索引唯一扫描INDEX UNIQUE SCAN.如select * from table wher ...
- HTML5:Canvas-基本用法
<canvas id="tutorial" width="150" height="150"></canvas> & ...
- Morphia开发简介
1. 什么是Morphia Morphia是一个开放源代码的对象关系映射框架,它对MongoDB数据库 java版驱动进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵 ...
- BZOJ4386 [POI2015]Wycieczki 矩阵+倍增
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4386 题解 一眼就可以看出来是邻接矩阵快速幂. 可是这里的边权不为 \(1\).不过可以发现, ...
- pycharm远程连接的步骤(有一项需特别注意)
1.设置远程服务器,在这里配置服务器地址等: 要注意下边的这个mappings设置好,跟编译器的path mapping设置为同一个,这里我没设置为同一个,后边就出现了点问题. 2.配置远程的编译器 ...
- 第三周作业—N42-虚怀若谷
一.显示/etc/目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录 ls /etc/[^[:alpha:]][[:alpha:]]* 二.复制/etc/目录下所有以p开头的 ...
- php rtrim()函数 语法
php rtrim()函数 语法 rtrim()函数怎么用? php rtrim()函数用于删除字符串右边的空格或其他预定义字符,语法是rtrim(string,charlist),返回经过charl ...
- 左除与右除的区别--MATLAB
MATLAB 左除与右除的区别 先定义两个矩阵a和矩阵b.如下: /:右除.a/b表示矩阵a乘以矩阵b的逆. \:左除.a\b表示矩阵a的逆乘以b. ./:右除.a./b表示矩阵a中的每个元素除以矩阵 ...
- Android Studio使用tips
安装位置:C:\Users\xxx\AppData\Local\Android\sdk https://developer.android.com/topic/libraries/support-li ...