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 ,可以看到這個類需要傳入兩個參數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 ),不得用於商業目的,基於本文修改後的作品務必以相同的許可發布。如有任何疑問,請與我聯系。
win2d 圖片水印