是否可以按照与图像类型无关的方式按比例调整图像大小(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图像的比例?
我知道使用this method,但不知道放哪个(!)。
答案 0 :(得分:16)
首先,你并没有抓住图像的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;
}
答案 1 :(得分:9)
我认为你的代码很好,但是考虑到参数的宽度和高度是我认为你出错的地方。为什么这种方法的调用者必须决定他们想要的宽度和高度有多大?我建议将其改为百分比:
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;
}
}