0
MVC3 앱을 통해 업로드 된 이미지의 크기를 조정하려고합니다. 아래 코드는 지정된 매개 변수를 기반으로하는 타겟 크기를 기준으로 이미지의 크기를 조정할 수 있지만 최종 결과는 거친 이미지입니다. 나는 stackoverflow와 msn 샘플에서 많은 다른 솔루션을 시도했지만 모든 것이 거친 이미지를 반환한다.이미지 크기 조정으로 인해 C#에서 거친 출력이 발생합니다.
static public Image ResizeFile(HttpPostedFileBase file, int targeWidth, int targetHeight)
{
Image originalImage = null;
bool IsImage = true;
Bitmap bitmap = null;
try
{
originalImage = Image.FromStream(file.InputStream, true, true);
}
catch
{
IsImage = false;
}
if (IsImage)
{
//accept an image only if it is less than 3mb(max)
if (file.ContentLength <= 3145728)
{
var newImage = new MemoryStream();
Rectangle origRect = new Rectangle(0, 0, originalImage.Width, originalImage.Height);
// if targets are null, require scale. for specified sized images eg. Event Image, or Profile photos.
int newWidth = 0;
int newHeight = 0;
//if the width is greater than height
if (originalImage.Width > originalImage.Height)
{
newWidth = targeWidth;
newHeight = targetHeight;
bitmap = new Bitmap(newWidth, newHeight);
}
//if the size of image is larger than either one of the target size
else if (originalImage.Width > targeWidth || originalImage.Height > targetHeight)
{
newWidth = targeWidth;
newHeight = targetHeight;
bitmap = new Bitmap(newWidth, newHeight);
}
//reuse old dimensions
else
{
bitmap = new Bitmap(originalImage.Width, originalImage.Height);
}
try
{
using (Graphics g = Graphics.FromImage((Image)bitmap))
{
g.SmoothingMode = SmoothingMode.AntiAlias;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.CompositingQuality = CompositingQuality.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(originalImage, new Rectangle(0, 0, newWidth, newHeight),
0,
0, // upper-left corner of source rectangle
originalImage.Width, // width of source rectangle
originalImage.Height, // height of source rectangle
GraphicsUnit.Pixel);
bitmap.Save(newImage, ImageFormat.Jpeg);
}
}
catch (Exception ex)
{ // error before IDisposable ownership transfer
if (bitmap != null)
bitmap.Dispose();
logger.Info("Domain/Utilities/ImageResizer->ResizeFile: " + ex.ToString());
throw new Exception("Error resizing file.");
}
}
}
return (Image)bitmap;
}
UPDATE 1 개 제거 매개 변수와 인코더는, 현재의 .jpeg로 저장. 그러나 여전히 거친 이미지를 생성합니다.
1) 아니요, 실제로 매개 변수를 전달하여 100x100px 또는 27x27px로 축소합니다. 원래 형식으로 저장된 이미지가 필요합니다. * .png, * .gif 등 –
코드에서 수행하는 작업이 아닙니다. imageEncoders [1] jpeg –
위 코드를 업데이트하여 인코더 등을 제거하고 .jpeg로 저장하려고했습니다. 그러나 여전히 거친 이미지를 생성합니다. –