1. ホーム
  2. c#

[解決済み] Base 64 の文字列を画像に変換して保存する

2022-04-27 12:23:15

質問

以下は私のコードです。

protected void SaveMyImage_Click(object sender, EventArgs e)
        {
            string imageUrl = Hidden1.Value;
            string saveLocation = Server.MapPath("~/PictureUploads/whatever2.png") ; 


            HttpWebRequest imageRequest = (HttpWebRequest)WebRequest.Create(imageUrl);
            WebResponse imageResponse = imageRequest.GetResponse();

            Stream responseStream = imageResponse.GetResponseStream();

            using (BinaryReader br = new BinaryReader(responseStream))
            {
                imageBytes = br.ReadBytes(500000);
                br.Close();
            }
            responseStream.Close();
            imageResponse.Close();

            FileStream fs = new FileStream(saveLocation, FileMode.Create);
            BinaryWriter bw = new BinaryWriter(fs);
            try
            {
                bw.Write(imageBytes);
            }
            finally
            {
                fs.Close();
                bw.Close();
            }
        }
}

トップのimageUrl宣言はBase64の画像文字列を取り込んでいて、それを画像に変換したいのです。 私は、私のコードのセットが"www.mysite.com/test.jpg"のような画像に対してのみ動作し、Base64文字列に対しては動作しないと考えています。 どなたかご提案いただけないでしょうか? ありがとうございます。

解決方法は?

ここでは、文字列のパラメータを受け取るようにメソッドを変更する例を示します。 そして、その画像オブジェクトを image.Save(...) .

public Image LoadImage()
{
    //data:image/gif;base64,
    //this image is a single pixel (black)
    byte[] bytes = Convert.FromBase64String("R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==");

    Image image;
    using (MemoryStream ms = new MemoryStream(bytes))
    {
        image = Image.FromStream(ms);
    }

    return image;
}

例外が発生する可能性があります A generic error occurred in GDI+. バイトがビットマップを表している場合。 このような場合、メモリストリームを破棄する前に(using文の中で)画像を保存してください。