C# 当将上传的jpeg转换为字节数组时,它会作为png完成吗?
我上传了一个jpeg图像,并将其作为字节数组存储在数据库中。但是,当我检索图像并选择“另存为”时,图像现在是PNG,文件大小增大了60-70%。下面是进行转换的函数。有人能解释为什么会发生这种情况吗C# 当将上传的jpeg转换为字节数组时,它会作为png完成吗?,c#,system.drawing,C#,System.drawing,我上传了一个jpeg图像,并将其作为字节数组存储在数据库中。但是,当我检索图像并选择“另存为”时,图像现在是PNG,文件大小增大了60-70%。下面是进行转换的函数。有人能解释为什么会发生这种情况吗 private byte[] ResizeImage(UploadedFile file, int maxWidth, int maxHeight) { int canvasWidth = maxWidth; int canvasHeight = maxHeight; us
private byte[] ResizeImage(UploadedFile file, int maxWidth, int maxHeight)
{
int canvasWidth = maxWidth;
int canvasHeight = maxHeight;
using (Bitmap originalImage = new Bitmap(file.InputStream))
{
int originalWidth = originalImage.Width;
int originalHeight = originalImage.Height;
Bitmap thumbnail = new Bitmap(canvasWidth, canvasHeight); // create thumbnail canvas
using (Graphics g = Graphics.FromImage((System.Drawing.Image)thumbnail))
{
g.SmoothingMode = SmoothingMode.Default;
g.InterpolationMode = InterpolationMode.Default;
g.PixelOffsetMode = PixelOffsetMode.Default;
//Get the ratio of original image
double ratioX = (double)canvasWidth / (double)originalWidth;
double ratioY = (double)canvasHeight / (double)originalHeight;
double ratio = ratioX < ratioY ? ratioX : ratioY; // use which ever multiplier is smaller
// Calculate new height and width
int newHeight = Convert.ToInt32(originalHeight * ratio);
int newWidth = Convert.ToInt32(originalWidth * ratio);
// Calculate the X,Y position of the upper-left corner
// (one of these will always be zero)
int posX = Convert.ToInt32((canvasWidth - (originalWidth * ratio)) / 2);
int posY = Convert.ToInt32((canvasHeight - (originalHeight * ratio)) / 2);
//g.Clear(Color.White); // Add white padding
g.DrawImage(originalImage, posX, posY, newWidth, newHeight);
}
/* Display uploaded image preview */
ImageConverter converter = new ImageConverter();
byte[] imageData = (byte[])converter.ConvertTo(thumbnail, typeof(byte[])); // Convert thumbnail into byte array and set new binary image
return imageData;
}
}
private byte[]ResizeImage(上传文件文件,int-maxWidth,int-maxHeight)
{
int canvasWidth=maxWidth;
int canvasHeight=最大高度;
使用(位图原始图像=新位图(file.InputStream))
{
int originalWidth=originalImage.Width;
int originalHeight=originalImage.Height;
位图缩略图=新位图(画布宽度、画布高度);//创建缩略图画布
使用(Graphics g=Graphics.FromImage((System.Drawing.Image)缩略图))
{
g、 SmoothingMode=SmoothingMode.Default;
g、 插值模式=插值模式。默认值;
g、 PixelOffsetMode=PixelOffsetMode.Default;
//得到原始图像的比例
双比率=(双)画布宽度/(双)原始宽度;
双倍比率=(双倍)画布高度/(双倍)原始高度;
double ratio=ratioX
关于ImageConverter的文档似乎有点缺乏,但有一种猜测是,除非另有规定,否则它默认将其转换为PNG格式(假设它甚至支持其他格式)。关于ImageConverter的文档似乎有点缺乏,但有一种猜测是,除非另有规定,否则它默认将其转换为PNG格式(假设它甚至支持其他格式)。我不确定ImageConverter
是否支持其他格式,所以请尝试
byte[] imageData;
using (MemoryStream stream = new MemoryStream())
{
thumbnail.Save(stream, ImageFormat.Jpeg);
imageData = stream.ToArray();
}
return byteArray;
如果需要更多控制(例如指定压缩级别),请退出。我不确定
ImageConverter
是否支持其他格式,请尝试
byte[] imageData;
using (MemoryStream stream = new MemoryStream())
{
thumbnail.Save(stream, ImageFormat.Jpeg);
imageData = stream.ToArray();
}
return byteArray;
如果您想要更多的控制(例如指定压缩级别),请查看。我不是C#guru,但您只需通过
Bitmap originalImage=new Bitmap(file.InputStream)
将JPG转换为位图,对吗?PNG是一种位图格式,所以您的originalImage
可能作为PNG使用。我不是C#guru,但您只需通过bitmap originalImage=new bitmap(file.InputStream)
将JPG转换为位图,对吗?PNG是一种位图格式,因此您的原始图像
可能作为PNG使用。谢谢,这非常有效。它还将原始jpeg从大约40kb减少到7kb,并且没有明显的质量损失!太棒了,谢谢,效果很好。它还将原始jpeg从大约40kb减少到7kb,并且没有明显的质量损失!令人惊叹的。