本文告訴大家如何使用 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 ,可以看到這個類需要傳入兩個參數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);
註意保存的格式可以是很多,但是尾碼名需要和保存的格式相同。
現在這個功能寫在圖床
歡迎大家訪問我搭建的博客 win2d 圖片水印 我自己搭建的博客會不斷更新
本作品採用知識共用署名-非商業性使用-相同方式共用 4.0 國際許可協議進行許可。歡迎轉載、使用、重新發佈,但務必保留文章署名林德熙(包含鏈接:http://blog.csdn.net/lindexi_gd ),不得用於商業目的,基於本文修改後的作品務必以相同的許可發佈。如有任何疑問,請與我聯繫。