c# - My image is not compressing -
loading code filesystem:
system.drawing.image image = system.drawing.image.fromfile(<location of original image>);); loading code browser request:
var memorystream = new memorystream(); using (memorystream) { system.web.httpcontext.current.request.files[upload].inputstream.copyto(memorystream); memorystream.toarray(); } byte[] bytes = memorystream.getbuffer(); // image server system.drawing.image image = new system.drawing.bitmap( system.web.httpcontext.current.request.files[upload].inputstream ); resize image call:
system.drawing.image image = this.resizeimage( image, originalimagepath, imagesizetype.original, null, null) save image call:
image.save(<location save>); the code doesn't compress image:
private system.drawing.image resizeimage(system.drawing.image image, string filepath, string sizetype, int? _width, int? height ) { ... system.drawing.bitmap b = new system.drawing.bitmap(width, resizeheight); b.setresolution(72, 72); system.drawing.graphics g = system.drawing.graphics.fromimage((system.drawing.image)b); g.compositingquality = compositingquality.highspeed; //g.interpolationmode = interpolationmode.highqualitybicubic; g.interpolationmode = interpolationmode.low; g.smoothingmode = smoothingmode.highspeed; g.drawimage(image, 0, 0, width, resizeheight); g.dispose(); return (system.drawing.image)b; } no matter image, when saves, saves @ high kb.
for example... jpg of 1024 x 768 @ 300kb becomes 600 x 400 @ 800kb
what doing wrong?
as magnus rightly said, drawing canvas makes no difference size... of file...
it save file part being noob... should be:
private imagecodecinfo getencoderinfo(string mimetype) { // image codecs image formats imagecodecinfo[] codecs = imagecodecinfo.getimageencoders(); // find correct image codec (int = 0; < codecs.length; i++) if (codecs[i].mimetype == mimetype) return codecs[i]; return null; } ... if( mimetype.tolower() == "image/jpeg") { imagecodecinfo jpgencoder = this.getencoderinfo("image/jpeg") system.drawing.imaging.encoder myencoder = system.drawing.imaging.encoder.quality; encoderparameters myencoderparameters = new encoderparameters(1); encoderparameter myencoderparameter = new encoderparameter(myencoder, 80l); myencoderparameters.param[0] = myencoderparameter; image.save(systemfilepath, jpgencoder, myencoderparameters); } else { image.save(systemfilepath); }
Comments
Post a Comment