2

画像をデータベースに保存しています。保存する前に、サイズを変更しています。

ただし、サイズを変更しても画像は圧縮されません。ストリームは同じストリームです。画像も圧縮できるようにしたいです。

データベースにストリームとして保存され、次のようにリクエストに返される画像を圧縮するにはどうすればよいですか?

    public ActionResult ViewImage(int id, string imageType ="image")
    {
        ContestImage contestImage = GetContestImage(id);

        byte[] fileContent;
        string mimeType;
        string fileName;

        if (imageType == "thumb")
        {
            fileContent = contestImage.ThumbNail.Image;
            mimeType = contestImage.ThumbNail.ImageMimeType;
            fileName = contestImage.ThumbNail.ImageFileName;
        }
        else if (imageType == "image")
        {
            fileContent = contestImage.Image.Image;
            mimeType = contestImage.Image.ImageMimeType;
            fileName = contestImage.Image.ImageFileName;
        }


        return File(fileContent, mimeType, fileName);
    }

public class UserImage
{
    public virtual int Id { set; get; }
    public virtual byte[] Image { set; get; }
    public virtual string ImageMimeType { set; get; }
    public virtual string ImageFileName { set; get; }
}

ContestImage には UserImage オブジェクトがあります。

4

2 に答える 2

0

データベースから画像を保存および取得するときにGZipStreamを使用してみましたか?

于 2012-05-19T20:49:41.497 に答える
0

2 つの主なアプローチが思い浮かびます。

  • データを画像としてロードし、圧縮ファイル形式 (png や jpeg など) で (メモリ ストリームに) シリアル化します。

  • DeflateStream などの圧縮ストリームを介してデータを (メモリ ストリームに) シリアル化します。

データを MemoryStream に取得したら、MemoryStream.ToArray() を使用して、それを単純な byte[] バッファーに変換し直して、データベースに渡すことができます。

于 2012-05-19T20:49:54.123 に答える