win2d 圖片水印

来源:https://www.cnblogs.com/lindexi/archive/2018/03/31/8684303.html
-Advertisement-
Play Games

本文告訴大家如何使用 win2d 給圖片加上水印。 <! more <! 標簽:水印,win2d,uwp 安裝 首先需要使用 Nuget 安裝 win2d ,安裝參見 "win10 uwp win2d" 如果沒有更新 dot net core 那麼在運行可能會出現下麵異常 那麼直接更新 dot ne ...


本文告訴大家如何使用 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 ),不得用於商業目的,基於本文修改後的作品務必以相同的許可發佈。如有任何疑問,請與我聯繫


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一.數制 分為二進位 八進位 十進位 十六進位 二.C的第一個簡單程式 1.C的基本類型 ①整型:有符號(signed):int 32位 -2147483648~2147483647 short 16位 -32768~32767 long 32位 -2174783648~2174783647 無符號 ...
  • Description 一個無向連通圖,頂點從1編號到N,邊從1編號到M。 小Z在該圖上進行隨機游走,初始時小Z在1號頂點,每一步小Z以相等的概率隨機選 擇當前頂點的某條邊,沿著這條邊走到下一個頂點,獲得等於這條邊的編號的分數。當小Z 到達N號頂點時游走結束,總分為所有獲得的分數之和。 現在,請你對 ...
  • 匿名類對象 創建的類的對象是匿名的。當我們只需要一次調用類的對象時,我們就可以考慮使用匿名的方式創建類的對象。特點是創建的匿名類的對象只能夠調用一次! package day007; //圓的面積 class circle { double radius; public double getArea ...
  • turtle:海龜(海龜庫) Turtle庫是Python語言中一個很流行的繪製圖像的函數庫 使用之前需要導入庫:import turtle • turtle.setup(width,height,startx,starty) -setup() 設置窗體的位置和大小 相對於桌面的起始點的坐標以及視窗 ...
  • 恢復內容開始 這是我第一次寫博客,這個想法源於我的師傅對我的建議,一是與大家一起進步,二是讓自己養成總結的好習慣。 “如果你步入的maven的世界,你便打開了Java的另一扇大門”。 這篇文章是面向沒有接觸過maven的同學們,對於maven玩的很溜的,請指出該文章的不足。 1.什麼是maven? ...
  • 1、創建一個圖形對象的步驟如下見上一篇博客(三)2、添加刪除實體的工具函數見上一篇博客(四) 3、添加圓的例子(完整源代碼請加雲幽學院免費課yunyun.ke.qq.com) [CommandMethod("MKCircle")] public void MKCircle() { //(1)獲取當前 ...
  • 1、添加刪除實體 C# ObjectARX二次開發添加刪除實體是非常容易主要代碼如下: 添加實體: objId = btr.AppendEntity(entity); trans.AddNewlyCreatedDBObject(entity, true); 刪除實體: entity.Erase(tr ...
  • 資料庫遷移方式:PMC(程式包管理控制器),CLI(程式所在目錄控制台操作) 1:在遷移資料庫之前AppSetting.json中配置資料庫信息 註:在NuGet包管理器上同時引入Entityframeworkcore.Tools 和 Entityframeworkcore.sqlserver 插件 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...