是否可以以独立于图像类型(bmp,jpg,png等)的方式按比例调整图像大小?
我有这个代码并知道缺少某些东西(但不知道是什么):
public bool ResizeImage(string fileName, string imgFileName, ImageFormat format, int width, int height) { try { using (Image img = Image.FromFile(fileName)) { Image thumbNail = new Bitmap(width, height, img.PixelFormat); Graphics g = Graphics.FromImage(thumbNail); g.CompositingQuality = CompositingQuality.HighQuality; g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; Rectangle rect = new Rectangle(0, 0, width, height); g.DrawImage(img, rect); thumbNail.Save(imgFileName, format); } return true; } catch (Exception) { return false; } }
如果不可能,我如何调整jpeg图像的比例?
我知道使用这种方法,但不知道放在哪里(!).
首先,您并没有抓住图像的CURRENT高度和宽度.为了按比例调整大小,您需要获取图像的当前高度/宽度并根据该值调整大小.
从那里,找到最大的属性,并根据它按比例调整大小.
例如,假设当前图像为800 x 600,您希望在400 x 400空间内按比例调整大小.抓住最大比例(800)并找到它与新尺寸的比率.800 - > 400 = .5现在取该比率并乘以第二维(600*.5 = 300).
你的新尺寸是400 x 300.这是一个PHP示例(抱歉......你会得到它)
$thumb_width = 400; $thumb_height = 400; $orig_w=imagesx($src_img); $orig_h=imagesy($src_img); if ($orig_w>$orig_h){//find the greater proportion $ratio=$thumb_width/$orig_w; $thumb_height=$orig_h*$ratio; }else{ $ratio=$thumb_height/$orig_h; $thumb_width=$orig_w*$ratio; }
我认为你的代码很好,但是考虑到参数的宽度和高度是我认为你出错的地方.为什么这种方法的调用者必须决定他们想要的宽度和高度有多大?我建议将其改为百分比:
public bool ResizeImage(string fileName, string imgFileName, ImageFormat format, int percent) { try { using (Image img = Image.FromFile(fileName)) { int width = img.Width * (percent * .01); int height = img.Height * (percent * .01); Image thumbNail = new Bitmap(width, height, img.PixelFormat); Graphics g = Graphics.FromImage(thumbNail); g.CompositingQuality = CompositingQuality.HighQuality; g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; Rectangle rect = new Rectangle(0, 0, width, height); g.DrawImage(img, rect); thumbNail.Save(imgFileName, format); } return true; } catch (Exception) { return false; } }