0

jpeg 画像をアップロードし、バイト配列としてデータベースに保存しています。ただし、画像を取得して「名前を付けて保存」を選択すると、画像はPNGになり、ファイルサイズは60〜70%大きくなります。これが変換を行う関数です。なぜこれが起こっているのか誰にも示唆できますか?

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;
    }
}
4

2 に答える 2

4

ImageConverter他の形式をサポートしているかどうかはわかりませんので、試してみてください

byte[] imageData;
using (MemoryStream stream = new MemoryStream())
{
    thumbnail.Save(stream, ImageFormat.Jpeg);
    imageData = stream.ToArray();
}
return byteArray;

より詳細な制御が必要な場合 (圧縮レベルの指定など) は、こちらをチェックしてください。

于 2013-01-23T11:58:40.053 に答える
0

ImageConverter に関するドキュメントは少し不足しているようですが、特に指定しない限り、デフォルトで PNG として変換されると推測されます (他の形式もサポートしていると仮定します)。

于 2013-01-23T11:53:26.033 に答える