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 ,可以看到这个类需要传入两个参数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);

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

现在这个功能写在图床

win10 uwp win2d 入门 看这一篇就够了

2018-12-25-win2d-图片水印的更多相关文章

  1. win2d 图片水印

    本文告诉大家如何使用 win2d 给图片加上水印. 安装 首先需要使用 Nuget 安装 win2d ,安装参见win10 uwp win2d 如果没有更新 dot net core 那么在运行可能会 ...

  2. 2018.12.25 SOW

    1. Understanding Customer Requirements 11.1. Project Overview 21.2. System Requirements 21.3. Indust ...

  3. 2018.12.25 Spring中JDBCTemplate模版API学习

    1 Spring整合JDBC模版 1.1 spring中土拱了一个可以操作数据库的对象.对象封装了jdbc技术 JDBCTemplateJDBC模板对象 1.2 与DBUtils中的QueryRunn ...

  4. 12.25模拟赛T1

    可以区间dp,但是复杂度太高. 所以应该是贪心,怎么贪心呢? 这种题目,最好还是手玩找一些规律. 可以发现,由于保证可以m次填完,所以颜色之间没有相互包含关系. 比较像分治的模型. 所以考虑拿到一个区 ...

  5. Swift - 给图片添加图片水印(图片上绘制另一张图,并可设透明度)

    我前面写了篇文章讲解如何给图片添加文字水印,而如果想要添加图片类型的水印也很简单,只要把原来代码里添加文字的部分改成图片即可. 1,效果图如下: (在图片左上角添加了一个半透明的logo图片) 2,为 ...

  6. C#图片水印代码整理

    这一段公司有个项目,客户要求上传的图片要带上自定义的水印.以前也经常和朋友讨论C#图片水印方面的问题,但是从来没有实际操作过.所以,借这次项目的机会也研究了一下C#图片水印的功能!本人参考的是disc ...

  7. 开发笔记:PDF生成文字和图片水印

    背景 团队手里在做的一个项目,其中一个小功能是用户需要上传PDF文件到文件服务器上,都是一些合同或者技术评估文档,鉴于知识版权和防伪的目的,需要在上传的PDF文件打上水印, 这时候我们需要提供能力给客 ...

  8. PHP 文字,图片水印,缩略图,裁切成小图(大小变小)

    文字水印基本思路:1.用getimagesize()获取图片的信息(as:大小,属性等):2.根据图片信息用imagecreatefromjpeg ()/imagecreatefromgif/imag ...

  9. GD库 图片缩略图 图片水印

    /** * GD库 图片缩略图 *//*$image = imagecreatefromjpeg("1.jpg");var_dump($image);exit;$width = i ...

  10. PDF怎么添加文字水印与图片水印

    现在是个知识分享时代,但不可避免的盗版也无处不在,不知道在我们大家身边有没有遇到过这样的情况:自己煞费苦心制作的PDF文档不知道在什么时候就会被别人给盗用了,那么如何才能尽量避免这个问题呢?今天带大家 ...

随机推荐

  1. 条款2:尽量使用const ,enum,inline替换define

    宁可使用编译器而不用预处理器 假设我们使用预处理器: #define ABC 1.56 这标识符ABC也许编译器没看到,也许它在编译器处理源码前就被预处理器移走了,于是“标识符”ABC没有进入标识符列 ...

  2. Notepad++安装Zen Codingt插件

    Zen Coding介绍 Zen Coding是一套面向文本编辑器的插件,它允许通过IDE工具的联想功能(内容辅助)高速度的编辑HTML.XML.XSL和其他结构化的代码格式. Zen Coding由 ...

  3. orcad原理图与PSPICE模型库名称

    Vendor PSpice Model Description Advanced Linear Devices adv_lin.lib Library of op-amps Advanced Line ...

  4. yield关键字详解与三种用法

    本篇文章比较硬核, 适合有一定Python基础的读者阅读, 如果您对Python还不甚了解可以先关注我哦, 我会持续更新Python技术文章 yield详解 yield与return相同每次调用都会返 ...

  5. vue 项目的运行与 打包

    1.vue init webpack 2.npm install axios 3.npm run dev  运行项目 4.npm run build 打包项目 会生成一个dist 文件夹,我们只需要把 ...

  6. boost bimap

    The library Boost.Bimap is based on Boost.MultiIndex and provides a container that can be used immed ...

  7. 英语单词Uninterrupted

    Uninterrupted 来源——不间断电源供应 UPS(Uninterrupted Power Supply) 翻译 adj. 不间断的:连续的 GRE   词根 un- +‎ interrupt ...

  8. Apache Flink 进阶(八):详解 Metrics 原理与实战

    本文由 Apache Flink Contributor 刘彪分享,本文对两大问题进行了详细的介绍,即什么是 Metrics.如何使用 Metrics,并对 Metrics 监控实战进行解释说明. 什 ...

  9. C#操作xml完整类文件

    C#操作xml完整类文件 xml_oper.cs using ...System; using System.Data; using System.Web; using System.Xml; /** ...

  10. 前端每日实战:36# 视频演示如何利用 CSS 动画原理,在页面上表现日蚀现象

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/OELvrK 可交互视频教程 此视频 ...