分類:
Asp.Net
2009-08-03 11:53
309人閱讀
收藏
舉報
-
-
-
- public class PhotoUtility {
-
-
-
- public enum Position {
- TopLeft
- ,
- TopRight
- ,
- TopCenter
- ,
- Middle
- ,
- BottomLeft
- ,
- BottomCenter
- ,
- BottomRight
- };
-
-
-
-
-
-
-
-
-
-
- public static void Compress(Image sourceImage, string filename, int r, string WaterString, Font F, Brush brush, Position p)
- {
- int targetWidth = r;
- int targetHeight = r;
-
- if (r > 0)
- {
- if (sourceImage.Height <= r && sourceImage.Width <= r)
- {
- targetHeight = sourceImage.Height;
- targetWidth = sourceImage.Width;
- }
- else if (sourceImage.Height > sourceImage.Width)
- {
- targetWidth = sourceImage.Width * r / sourceImage.Height;
- }
- else
- {
- targetHeight = sourceImage.Height * r / sourceImage.Width;
- }
- }
- else
- {
- targetHeight = sourceImage.Height;
- targetWidth = sourceImage.Width;
- }
-
-
- Image targetImage = Image.FromHbitmap(new Bitmap(targetWidth, targetHeight, PixelFormat.Format32bppRgb).GetHbitmap());
- Graphics g = Graphics.FromImage(targetImage);
-
- g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
- g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
- g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
- g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
- g.DrawImage(sourceImage, 0, 0, targetWidth, targetHeight);
-
- if (WaterString!=null && WaterString != string.Empty){
- F = (F == null ? new Font("Arial Black", 28, FontStyle.Bold) : F);
- brush = (brush == null ? Brushes.Silver : brush);
- float WaterStringLength = (float)WaterString.Length * F.Size;
- switch (p){
- case Position.Middle:
- g.DrawString(WaterString, F, brush, (targetWidth - WaterStringLength) / 2, targetHeight / 2 - 50);
- break;
- case Position.TopCenter:
- g.DrawString(WaterString, F, brush, (targetWidth - WaterStringLength) / 2, F.Size);
- break;
- case Position.BottomCenter:
- g.DrawString(WaterString, F, brush, (targetWidth - WaterStringLength) / 2, targetHeight - F.Size * 2);
- break;
- case Position.TopLeft:
- g.DrawString(WaterString, F, brush, 2, F.Size);
- break;
- case Position.BottomLeft:
- g.DrawString(WaterString, F, brush, 2, targetHeight - F.Size * 2);
- break;
- default:
- g.DrawString(WaterString, F, brush, (targetWidth - WaterStringLength) / 2, targetHeight / 2 - 50);
- break;
- }
- }
- g.Dispose();
-
- EncoderParameters encParams = new EncoderParameters(1);
- encParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 65L);
- ImageCodecInfo codeInfo = null;
- ImageCodecInfo[] codeInfos = ImageCodecInfo.GetImageEncoders();
- foreach (ImageCodecInfo info in codeInfos)
- {
- if (info.MimeType.Equals("image/jpeg"))
- {
- codeInfo = info;
- break;
- }
- }
- if (codeInfo != null)
- {
- targetImage.Save(filename, codeInfo, encParams);
- }
- targetImage.Dispose();
- sourceImage.Dispose();
- }
-
-
-
-
-
-
-
-
-
- public static void Compress(Image sourceImage, string filename, int r, string WaterString, Font F, Brush brush) {
- Compress(sourceImage, filename, r, WaterString, F, brush, Position.Middle);
- }
-
-
-
-
-
- public static void Compress(Image sourceImage, string filename) {
- Compress(sourceImage, filename, 0, null, null, null, Position.Middle);
- }
-
-
-
-
-
-
- public static void Compress(Image sourceImage, string filename, int r){
- Compress(sourceImage, filename, r, null, null, null, Position.Middle);
- }
-
-
-
-
-
-
-
- public static void CreateThumb(Image sourceImage, int thumbWidth, int thumbHeight, string filename) {
- int tw = thumbWidth;
- int th = thumbHeight;
- if (sourceImage.Height < th && sourceImage.Width < tw)
- {
- th = sourceImage.Height;
- tw = sourceImage.Width;
- }
- else if (sourceImage.Height / th > sourceImage.Width / tw)
- {
- tw = sourceImage.Width * th / sourceImage.Height;
- }
- else
- {
- th = sourceImage.Height * tw / sourceImage.Width;
- }
-
- Image thumbImage = Image.FromHbitmap(new Bitmap(thumbWidth, thumbHeight, PixelFormat.Format32bppRgb).GetHbitmap());
- Graphics g = Graphics.FromImage(thumbImage);
-
-
-
- g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
- g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
- g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
- g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
-
- SolidBrush brush = new SolidBrush(Color.White);
- g.FillRectangle(brush, 0, 0, thumbWidth, thumbHeight);
-
-
- g.DrawImage(sourceImage, (thumbWidth - tw) / 2, (thumbHeight - th) / 2, tw, th);
- g.Dispose();
-
- thumbImage.Save(filename, ImageFormat.Png);
- thumbImage.Dispose();
- sourceImage.Dispose();
- }
-
-
-
-
-
-
-
- public static void Clip(Image sourceImage, int X, int Y,int Width,int Height,string filename) {
- Bitmap b = new Bitmap(sourceImage);
- Bitmap b1 = b.Clone(new Rectangle(X, Y, Width, Height), PixelFormat.Format24bppRgb);
- b1.Save(filename);
- b.Dispose();
- b1.Dispose();
- }
- }
- ------------------
-
-
-
- public class ThumbImage
- {
- public enum CutWay
- {
-
-
-
- HW,
-
-
-
- W,
-
-
-
- H,
-
-
-
- Cut,
-
-
-
- DB
- }
-
-
-
-
-
-
-
-
-
- public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, CutWay cutWay)
- {
- System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);
-
- int towidth = width;
- int toheight = height;
- int x = 0;
- int y = 0;
- int ow = originalImage.Width;
- int oh = originalImage.Height;
- switch (cutWay)
- {
- case CutWay.HW:
- break;
- case CutWay.W:
- if ((double)originalImage.Width < (double)towidth && (double)originalImage.Height < (double)toheight)
- {
- towidth = originalImage.Width;
- toheight = originalImage.Height;
- }
- else { toheight = originalImage.Height * width / originalImage.Width; }
- break;
- case CutWay.H:
- if ((double)originalImage.Width < (double)towidth && (double)originalImage.Height < (double)toheight)
- {
- towidth = originalImage.Width;
- toheight = originalImage.Height;
- }
- else
- {
- towidth = originalImage.Width * height / originalImage.Height;
- }
- break;
- case CutWay.Cut:
- if ((double)originalImage.Width < (double)towidth && (double)originalImage.Height < (double)toheight)
- {
- towidth = originalImage.Width;
- toheight = originalImage.Height;
- }
- else if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
- {
- oh = originalImage.Height;
- ow = originalImage.Height * towidth / toheight;
- y = 0;
- x = (originalImage.Width - ow) / 2;
- }
- else
- {
- ow = originalImage.Width;
- oh = originalImage.Width * height / towidth;
- x = 0;
- y = (originalImage.Height - oh) / 2;
- }
- break;
- case CutWay.DB:
- if ((double)originalImage.Width<(double)towidth&&(double)originalImage.Height<(double)toheight)
- {
- towidth = originalImage.Width;
- toheight = originalImage.Height;
- }
- else if ((double)originalImage.Width / (double)towidth < (double)originalImage.Height / (double)toheight)
- {
- toheight = height;
- towidth = originalImage.Width * height / originalImage.Height;
- }
- else
- {
- towidth = width;
- toheight = originalImage.Height * width / originalImage.Width;
- }
- break;
- default:
- break;
- }
-
- System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
-
- System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
-
- g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
-
- g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
-
- g.Clear(System.Drawing.Color.Transparent);
-
- g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight),
- new System.Drawing.Rectangle(x, y, ow, oh),
- System.Drawing.GraphicsUnit.Pixel);
- try
- {
-
- bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
-
- }
- catch (System.Exception e)
- {
- throw e;
- }
- finally
- {
- originalImage.Dispose();
- bitmap.Dispose();
- g.Dispose();
- }
- }
-
-
-
-
-
-
- public static void AddShuiYinWord(string Path, string Path_sy)
- {
- string addText = "測試水印";
- System.Drawing.Image image = System.Drawing.Image.FromFile(Path);
- System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
- g.DrawImage(image, 0, 0, image.Width, image.Height);
- System.Drawing.Font f = new System.Drawing.Font("Verdana", 16);
- System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.Blue);
- g.DrawString(addText, f, b, 15, 15);
- g.Dispose();
- image.Save(Path_sy);
- image.Dispose();
- }
-
-
-
-
-
-
-
- public static void AddShuiYinPic(string Path, string Path_syp, string Path_sypf)
- {
- System.Drawing.Image image = System.Drawing.Image.FromFile(Path);
- System.Drawing.Image copyImage = System.Drawing.Image.FromFile(Path_sypf);
- System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
- g.DrawImage(copyImage, new System.Drawing.Rectangle(image.Width - copyImage.Width, image.Height - copyImage.Height, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, System.Drawing.GraphicsUnit.Pixel);
- g.Dispose();
- image.Save(Path_syp);
- image.Dispose();
- }
-
-
-
-
-
- public static ImageInformation GetImageInforation(string Path)
- {
- using (Image img = Image.FromFile(Path))
- {
-
- return new ImageInformation() { Width=img.Width, Height=img.Height };
- }
- }
-
-
- }
-
-
-
- public struct ImageInformation
- {
-
-
-
- public int Width { get; set; }
-
-
-
- public int Height { get; set; }
- }
|