逆天通用水印支援Winform,WPF,Web,WP,Win10。支援位置選擇(9個位置 ==》[X])
/// <summary> /// 水印幫助類 /// </summary> public class WaterMarkHelper { #region 設定水印 /// <summary> /// 設定水印 /// </summary> /// <param name="imgPath"></param> /// <param name="model"></param> /// <returns></returns> public static Image SetWaterMark(string imgPath, WaterMark model) { //獲取背景圖 Image imgSource = Image.FromFile(imgPath); //獲取水印圖片 Image markImg = null; //水印檢驗(文字,圖片[路徑下是否存在圖片]) #region 水印校驗+水印處理 if (model == null) { return null; } //看看原圖是否存在 if (!System.IO.File.Exists(imgPath)) { return null; } //根據水印型別校驗+水印處理 switch (model.WaterMarkType) { case WaterMarkAPP.Enums.WaterMarkTypeEnum.Text: if (string.IsNullOrEmpty(model.Text)) { return null; } else { markImg = TextToImager(model);//水印處理-如果是文字就轉換成圖片 } break; case WaterMarkAPP.Enums.WaterMarkTypeEnum.Image: if (!System.IO.File.Exists(model.ImgPath)) { return null; } else { //獲得水印影象 markImg = Image.FromFile(model.ImgPath); } break; case WaterMarkAPP.Enums.WaterMarkTypeEnum.NoneMark: return imgSource; } #endregion #region 建立顏色矩陣 //建立顏色矩陣 float[][] ptsArray ={ new float[] {1, 0, 0, 0, 0}, new float[] {0, 1, 0, 0, 0}, new float[] {0, 0, 1, 0, 0}, new float[] {0, 0, 0, model.Transparency, 0}, //注意:0.0f為完全透明,1.0f為完全不透明 new float[] {0, 0, 0, 0, 1}}; ColorMatrix colorMatrix = new ColorMatrix(ptsArray); //新建一個Image屬性 ImageAttributes imageAttributes = new ImageAttributes(); //將顏色矩陣新增到屬性 imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Default); #endregion //原圖格式檢驗+水印 #region 原圖格式檢驗+水印 //判斷是否是索引影象格式 if (imgSource.PixelFormat == PixelFormat.Format1bppIndexed || imgSource.PixelFormat == PixelFormat.Format4bppIndexed || imgSource.PixelFormat == PixelFormat.Format8bppIndexed) { #region 索引圖片,轉成點陣圖再加圖片 //轉成點陣圖,這步很重要 Bitmap bitmap = new Bitmap(imgSource.Width, imgSource.Height); Graphics graphic = Graphics.FromImage(bitmap); #region 縮放處理 //如果原圖小於水印圖片 等比縮放水印圖 if (markImg.Width >= imgSource.Width || markImg.Height >= imgSource.Height) { markImg = ImageShrink(imgSource, markImg); } #endregion #region 水印位置 //水印位置 int x; int y; WaterMarkLocations(model, imgSource, markImg, out x, out y); #endregion //將原圖畫在點陣圖上 graphic.DrawImage(imgSource, new Point(0, 0)); //將水印加在點陣圖上 graphic.DrawImage(markImg, new Rectangle(x, y, markImg.Width, markImg.Height), 0, 0, markImg.Width, markImg.Height, GraphicsUnit.Pixel, imageAttributes); graphic.Dispose(); return bitmap; #endregion } else { #region 非索引圖片,直接在上面加上水印 Graphics graphic = Graphics.FromImage(imgSource); #region 縮放處理 //如果原圖小於水印圖片 等比縮放水印圖 if (markImg.Width >= imgSource.Width || markImg.Height >= imgSource.Height) { markImg = ImageShrink(imgSource, markImg); } #endregion #region 水印位置 //水印位置 int x; int y; WaterMarkLocations(model, imgSource, markImg, out x, out y); #endregion //將水印加在原圖上 graphic.DrawImage(markImg, new Rectangle(x, y, markImg.Width, markImg.Height), 0, 0, markImg.Width, markImg.Height, GraphicsUnit.Pixel, imageAttributes); graphic.Dispose(); return imgSource; #endregion } #endregion } #endregion #region 水印處理-文字轉圖片 /// <summary> /// 水印處理-文字轉圖片 /// </summary> /// <param name="model"></param> /// <returns></returns> private static Image TextToImager(WaterMark model) { Font f = new Font(model.FontFamily, model.FontSize, model.FontStyle); Bitmap fbitmap = new Bitmap(Encoding.GetEncoding("GBK").GetByteCount(model.Text) / 2 * f.Height, f.Height); Graphics gh = Graphics.FromImage(fbitmap);//建立一個畫板; gh.SmoothingMode = SmoothingMode.AntiAlias; gh.DrawString(model.Text, f, model.BrushesColor, 0, 0);//畫字串 return fbitmap as Image; } #endregion #region 水印位置 /// <summary> /// 水印位置 /// </summary> /// <param name="model"></param> /// <param name="imgSource"></param> /// <param name="markImg"></param> /// <param name="x"></param> /// <param name="y"></param> private static void WaterMarkLocations(WaterMark model, Image imgSource, Image markImg, out int x, out int y) { x = 0; y = 0; switch (model.WaterMarkLocation) { case WaterMarkLocationEnum.TopLeft: x = 0; y = 0; break; case WaterMarkLocationEnum.TopCenter: x = imgSource.Width / 2 - markImg.Width / 2; y = 0; break; case WaterMarkLocationEnum.TopRight: x = imgSource.Width - markImg.Width; y = 0; break; case WaterMarkLocationEnum.CenterLeft: x = 0; y = imgSource.Height / 2 - markImg.Height / 2; break; case WaterMarkLocationEnum.CenterCenter: x = imgSource.Width / 2 - markImg.Width / 2; y = imgSource.Height / 2 - markImg.Height / 2; break; case WaterMarkLocationEnum.CenterRight: x = imgSource.Width - markImg.Width; y = imgSource.Height / 2 - markImg.Height / 2; break; case WaterMarkLocationEnum.BottomLeft: x = 0; y = imgSource.Height - markImg.Height; break; case WaterMarkLocationEnum.BottomCenter: x = imgSource.Width / 2 - markImg.Width / 2; y = imgSource.Height - markImg.Height; break; case WaterMarkLocationEnum.BottomRight: x = imgSource.Width - markImg.Width; y = imgSource.Height - markImg.Height; break; } } #endregion #region 縮放水印 /// <summary> /// 等比縮放水印圖(縮小到原圖的1/3) /// </summary> /// <param name="imgSource"></param> /// <param name="successImage"></param> /// <returns></returns> private static Image ImageShrink(Image imgSource, Image markImg) { int w = 0; int h = 0; Image.GetThumbnailImageAbort callb = null; //對水印圖片生成縮圖,縮小到原圖的1/3(以短的一邊為準) if (imgSource.Width < imgSource.Height) { w = imgSource.Width / 3; h = markImg.Height * w / markImg.Width; } else { h = imgSource.Height / 3; w = markImg.Width * h / markImg.Height; } markImg = markImg.GetThumbnailImage(w, h, callb, new System.IntPtr()); return markImg; } #endregion }
相關推薦
逆天通用水印支援Winform,WPF,Web,WP,Win10。支援位置選擇(9個位置 ==》[X])
/// <summary> /// 水印幫助類 /// </summary> public class WaterMarkHelper { #region 設定水印 /// <summary&
逆天通用水印擴充套件篇~新增剪貼簿系列的功能和手動配置,卸除原基礎不常用的功能
using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Text; using WaterMarkAPP.Enums; using WaterMarkAPP.
7-8 點贊(20 分) 微博上有個“點贊”功能,你可以為你喜歡的博文點個贊表示支援。每篇博文都有一些刻畫其特性的標籤,而你點讚的博文的型別,也間接刻畫了你的特性。本題就要求你寫個程式,通過統計一個人
#include <stdio.h> #include <stdlib.h> int main() { int n,k,a[1000],c[1000],i,j=0,p;///先合併成一個數組 scanf("%d",&n);
阿裏資深技術專家:在各階段中,3年經驗的程序員應該具備哪些技術能力(進階必看)
Java 後端 進階 3年工作經驗的Java程序員應該具備哪些技術能力,這可能是Java程序員們比較關心的內容。我這裏要說明一下,以下列舉的內容不是都要會的東西,但是你掌握得越多,最終能得到的評價、拿到的薪水勢必也越高。1、基本語法這包括static、final、transient等關鍵字的作用,
Matplotlib學習---matplotlib裏顏色,標記,線條類型參數的選擇(colors, markers, line styles)
light bfd hot thead ace silver stl add tpi 顏色(Colors): 基礎顏色: charactercolor ‘b‘ blue ‘g‘ green ‘r‘ red ‘c‘ cyan ‘m‘ magenta
藍的成長記——追逐DBA(1):奔波於路上,挺進山東 藍的成長記——追逐DBA(3):古董上操作,資料匯入匯出成了問題 藍的成長記——追逐DBA(8):重拾SP報告,回憶oracle的STATSPACK實驗 藍的成長記— —追逐DBA(9):國慶漸去,追逐DBA,新規劃,新啟程
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
爬取微信好友資訊,進行視覺化分析(頭像人臉識別部分已更新!)(程式碼已上傳)
【Code】下載 1、專案說明 本次專案主要實現了以下功能: 2、微信好友資訊的獲取與檔案儲存 3、微信好友性別分析 4、微信好友地區分佈視覺化 5、微信好友個性簽名詞雲圖及好友備註詞雲圖 6、微信好
編寫分數類Fraction,實現兩個分數的加、減、乘和除四則運算。主函式已給定。輸入 每行四個數,分別表示兩個分數的分子和分母,以0 0 0 0 表示結束。 輸出 空格分隔的兩個分數的減和除的結果。
#include <iostream.h> int cishu=1; class Fraction {public: Fraction(){a=0;b=0;} Fraction(int x,int y
sql 刪除表中多餘的重複記錄(多個欄位),只保留一條記錄
在網上呢~自己收集了一些關於這方面的知識~ 自己整理一下 1.查詢重複記錄 select * from 表名 where 重複欄位 in (select 重複欄位 from 表名 group
JS陣列方法 (13個操作方法),陣列屬性 (3個屬性)
一、陣列方法 shift() 陣列最前面刪除元素 unshift() 陣列最前面前新增元素 push() 陣列最後面新增元素 pop() 陣列最後面刪除元素 刪除某個陣列元素 delete arr[2] concat()數組合並 array.co
plot圖畫多條折線圖,如何把所有的折線都包含在圖中呢(座標軸範圍如何設定)
plot(himpact,axes=F) axis(1,at=c(0:23),labels=c(1:24));axis(2,at=c(0:100),labels=c(0:100)); lines(spline(x=c(0:23),y=himpact[,2]),col="blue"); lines(spli
Java 進階面試問題列表,程式設計師“三金四銀”面試季必知!(拒絕傻瓜式分享)
開發十年,就只剩下這套架構體系了! >>>
類載入流程,類載入機制及自定義類載入器詳解(面試再也不怕了)
一、引言二、類的載入、連結、初始化1、載入1.1、載入的class來源2、類的連結2.1、驗證2.2、準備2.3、解析3、類的初始化3.1、< clinit>方法相關3.2、類初始化時機3.3、final定義的初始化3.4、ClassLoader只會對類進行載入,不會進行初始化三、類載入器1、JV
使用webgl(three.js)搭建一個3D智慧園區、3D建築,3D消防模擬,web版3D,bim管理系統——第四課(炫酷版一)
這節課我們主要講解園區三維視覺化炫酷感官技術方案 前言: 當基礎技術達到普及狀態,應用就趨向於極致,在三維視覺化領域也是這個道理。各大視覺化公司都追求美觀最大化,這時候美工的作用就不容忽視了。 背景說明: A、經濟背景:經濟下行的大環境下,各大有社會責任的企業與部門開始拉動內需,擴大預
月薪上萬,卻依然不被世界所理解。程式設計師訪談(二)
點選上方關注我們,讓小care關愛你! 有一個“月入五萬卻像月入五千樣子”的群體,以“收入高”、“腦回路簡單”、“一成不變”等
根據阿里巴巴職位層級,你的程式設計水平在什麼位置?(附等級詳細要求)
目前並沒有對程式設計師等級進行明確的劃分,很多時候是參照BAT的程式設計師等級進行判定。 BAT(中國網際網路公司三巨頭) BAT,B指百度、A指阿里巴巴、T指騰訊,是中國網際網路公司百度公司(Baidu)、阿里巴巴集團(Alibaba)、騰訊公司(Tencent)三大網際網路公司首字母的縮寫。 先來一
DockPanel 3.0.4.0 支援.net 2.0 修改版 支援winform wpf,包括vs2012 -vs2015 等多套面板
這是根據官方在github 18年5月份版本進行的修訂1. 修改使之可以在wpf 中正常使用,git上面的版本在wpf 上 拖拽會報異常2. 支援.net 2.0 包括面板附wpf 使用例子:1. 首先先新增引用 System.Windows.Forms 和 WindowsF
520,魔都上海有一家逆天的分手花店火火火了
報價單 情人節 靜安寺 上海 花店 5月20日,520諧音“我愛你”,這一天被情侶們當做了小情人節,紛紛在這一天選擇告白愛意。可是,在上海有一家花店卻釋放出了520終極“黑暗料理”。這家分手的位置非常好,愚園路102號,距離靜安寺、久光百貨等核心商圈不過幾十米。分手花店,光這店名就非常紮心
開通渲雲至尊會員,送正版3DS MAX 2108,這是要逆天啊!
小編聽說,大家都用破解版的 3ds Max ,想問說,破解的用的還順手麽,有木有遇到軟件崩潰,系統紊亂,病毒侵入的問題,如果這些你都沒有遇到,那麽恭喜您,下一個就是你!俗話說,常在河邊走,哪有不濕鞋,所以,聰明人都選擇了正版,而且,盜版軟件已經完全破壞了正常的“生態環境”,越來越多的人對破解、盜版這個事
這手速逆天了!編輯機器人分秒編輯,人類編輯還有希望嗎?
人工智能編輯 編輯機器人 寫作機器人 資訊機器人 什麽是編輯機器人?編輯機器人就是通過AI技術來智能化提供文本的分類、分詞、關鍵詞提取等工作,極大提高文本處理效率。智能化的資訊頻道定制服務專家,無需人工編輯,資訊內容自動化生成。助力資訊運營“無人化編輯”,實現內容的7*24小時實時更新,是企業