This is a simple implementation without optimization
public static System.Drawing.Image Getimagethumb (System.Drawing.Image sourceimg, int width,
int height) {System.Drawing.Image targetimg = new System.Drawing.Bitmap (width, height); using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage (targetimg)) {G.interpola
Tionmode = System.Drawing.Drawing2D.InterpolationMode.High;
G.smoothingmode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
G.interpolationmode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.compositingquality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
G.pixeloffsetmode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality; G.drawimage (sourceimg, New System.Drawing.Rectangle (0, 0, width, height), new system.drawing.
Rectangle (0, 0, Sourceimg.width, sourceimg.height), System.Drawing.GraphicsUnit.Pixel); G.dispose ();
return targetimg; }
This method is relatively simple and uses high quality compression. After this method of compression, 200K images can only be compressed to about 160k.
Rewrite the code to achieve the following method
public Bitmap Getimagethumb (Bitmap mg, Size newsize) {double ratio = 0d;
Double mythumbwidth = 0d;
Double mythumbheight = 0d;
int x = 0;
int y = 0;
Bitmap BP; if (MG. Width/convert.todouble (Newsize.width)) > (MG. Height/convert.todouble (newsize.height))) ratio = Convert.todouble (mg.
Width)/convert.todouble (newsize.width); else ratio = Convert.todouble (mg.
Height)/convert.todouble (newsize.height); Mythumbheight = Math.ceiling (mg.
Height/ratio); Mythumbwidth = Math.ceiling (mg.
Width/ratio);
Size thumbsize = new size (int) newsize.width, (int) newsize.height);
bp = new Bitmap (newsize.width, newsize.height);
x = (newsize.width-thumbsize.width)/2;
y = (newsize.height-thumbsize.height); System.Drawing.Graphics g = GraphiCs.
FromImage (BP);
G.smoothingmode = smoothingmode.highquality;
G.interpolationmode = Interpolationmode.highqualitybicubic;
G.pixeloffsetmode = pixeloffsetmode.highquality;
Rectangle rect = new Rectangle (x, Y, Thumbsize.width, thumbsize.height); G.drawimage (Mg, rect, 0, 0, MG). Width, MG.
Height, GraphicsUnit.Pixel);
return BP; }
This implementation of compression makes the compression rate greatly increased. In fact, the code does not change how much, the most important is in the preservation of the time if the JPG format,
If you do not specify a format, the PNG format is used by default.
The following is written by the Friends of the garden to compress the image according to the setting of the image quality value:
public static bool Getpicthumbnail (String sfile, string outpath, int flag) {S Ystem.
Drawing.image ISource = System.Drawing.Image.FromFile (sfile);
ImageFormat Tformat = Isource.rawformat;
The following code to save the picture, set the compression quality EncoderParameters EP = new EncoderParameters ();
long[] qy = new Long[1]; Qy[0] = flag;//Set the proportion of compression 1-100 encoderparameter Eparam = new Encoderparameter (System.Drawing.Imaging.Encoder.Qu
Ality, QY); Ep.
Param[0] = Eparam;
try {imagecodecinfo[] Arrayici = Imagecodecinfo.getimageencoders ();
ImageCodecInfo jpegiciinfo = null; for (int x = 0; x < Arrayici.length + +) {if (arrayici[x).
Formatdescription.equals ("JPEG")) {jpegiciinfo = arrayici[x];
Break
} } if (Jpegiciinfo!= null) {Isource.save (Outpath, Jpegiciinfo, EP);//dfile is the new compressed path} else {isource.save (Outpath, t
Format);
return true;
catch {return false;
finally {isource.dispose ();
Isource.dispose (); }
}