圖片處理程序示例,實現功能點有
1、遠程圖片轉換Image對象
2、在圖片上添加文字
3、在圖片上添加圖片
4、將圖片進行橢圓形(圓形)切割
5、微軟程序處理圖片失真。不少人發現圖片用微軟程序重繪之後,即時什麼也不做,圖片質量也會壓縮,微軟的Image.Save方法,不設置壓縮質量,是默認保存到圖片壓縮質量爲75,所以保存的圖片質量偏低。
代碼如下,此處是asp.net中的一般處理程序
public void ProcessRequest(HttpContext context)
{
//產品圖片
string ProducePicUrl = "http://img.xxx.com/group1/M00/36/B8/cnHoeV3pxMWANofjAACQFhMkSE0601_s.jpg";
Image img = GetStreamByUrl(ProducePicUrl);
Graphics grap = Graphics.FromImage(img);
//設置輸出圖片質量
grap.CompositingQuality = CompositingQuality.HighQuality;
grap.SmoothingMode = SmoothingMode.HighQuality;
grap.InterpolationMode = InterpolationMode.HighQualityBicubic;
//在圖片上添加文字
grap.DrawString("中國山東找藍翔", new Font("宋體", 20, FontStyle.Bold), Brushes.Blue, new PointF(29, 29));
//企業logo圖片
string ComPicUrl = "http://img.xxx.com/group1/M00/2D/62/cnHoeVsfISeAEPqhAAA5bjwdSWo698_s.jpg";
Image Comimg = GetStreamByUrl(ComPicUrl);
//圖片圓形切割
Comimg = CutEllipse(Comimg, new Rectangle(0, 0, Comimg.Width, Comimg.Height), new Size(100, 100));
//圖片上添加圖片
grap.DrawImage(Comimg, new Rectangle(img.Width - 100, 0, 100, 100),
0, 0, Comimg.Width, Comimg.Height, GraphicsUnit.Pixel);
EncoderParameters ps = new EncoderParameters(1);
EncoderParameter p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
ps.Param[0] = p;
ImageCodecInfo imgcodec = GetCodecInfo("image/jpeg");
img.Save(context.Response.OutputStream, imgcodec, ps);
//img.Save(context.Response.OutputStream, ImageFormat.Jpeg);常用圖片保存,質量被壓縮
context.Response.ContentType = "image/jpeg";
}
/// <summary>
/// 圖片剪切成橢圓形
/// </summary>
/// <param name="img">原始Image對象</param>
/// <param name="rec">被切割圖片的矩形範圍</param>
/// <param name="size">橢圓的尺寸</param>
/// <returns></returns>
private Image CutEllipse(Image img, Rectangle rec, Size size)
{
Bitmap bitmap = new Bitmap(size.Width, size.Height);
using (Graphics g = Graphics.FromImage(bitmap))
{
using (TextureBrush br = new TextureBrush(img, System.Drawing.Drawing2D.WrapMode.Clamp, rec))
{
br.ScaleTransform(bitmap.Width / (float)rec.Width, bitmap.Height / (float)rec.Height);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.FillEllipse(br, new Rectangle(Point.Empty, size));
}
}
return bitmap;
}
private ImageCodecInfo GetCodecInfo(string mimeType)
{
ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();
foreach (ImageCodecInfo ici in CodecInfo)
{
if (ici.MimeType == mimeType) return ici;
}
return null;
}
/// <summary>
/// 獲取遠程圖片的Image對象
/// </summary>
/// <returns></returns>
public Image GetStreamByUrl(string imgurl)
{
WebRequest myrequest = WebRequest.Create(imgurl);
myrequest.Timeout = 3 * 1000;
WebResponse myresponse = myrequest.GetResponse();
Stream imgstream = myresponse.GetResponseStream();
Image img = Image.FromStream(imgstream);
myrequest.Abort();
myresponse.Close();
return img;
}
最終效果:右側圓形區域是企業Logo
參考資料:https://blog.csdn.net/chinacsharper/article/details/50854852