2017-07-13 14 views
0

イメージをアップロードするようユーザーに求めています。これはどのイメージフォーマットでも構いません。Base64から画像へのイメージ

私はbase64のデータを.Netコントローラに渡すだけでなく、ファイル名(そこから拡張子を得ることができます)を渡します。

次に、そのbase64文字列をImageに変換します。

public static Image Base64ToImage(string base64String) 
    { 

     // Convert base 64 string to byte[] 
     byte[] imageBytes = Convert.FromBase64String(base64String); 
     // Convert byte[] to Image 
     using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length)) 
     { 
      Image image = Image.FromStream(ms, true); 
      return image; 
     } 
    } 

私はエラーを取得する:

それは非ベース64文字、二つ以上のパディング文字、またはパディング文字の間で不正な文字が含まれているように、入力が有効なベース-64文字列ではありません

私は、base54文字列が持っているからだと思う:

"データ:画像/ JPEG; base64で、/ 9J/4AAQSkZJRgABAを...." 開始時に。

"data:image/jpeg; base64"をトリミングして保存する必要がありますか?ファイルタイプに関するデータを削除しているので、別の場所に指定する必要がありますか?

私が見つけたすべての例は、正面から何かを整えていないようです。彼らは文字列を保存するだけです。私は推測している、私の側の何かは、ヘッダーを追加していますか?

+0

'data:image/jpeg; base64 'を削除するだけで、イメージをファイルシステムに保存するときにタイプを指定できます。 –

+0

ありがとうございます。イメージがデータベースに送信されています(したがって、後でバイト[]に変換されます)。ファイルの種類をデータベースに保存する必要があるので、読み込んだときに読み込む形式を知っていますか? – Craig

+0

blobとして 'base64'を保存してみませんか? –

答えて

0

こんにちは、過去に使用していた変換版のコンバータを見つけてください。 詳しい説明が必要な場合は教えてください。

あなたのベース64への変換のようですね!

 /// <summary> 
    ///1 Convert String to Image 
    /// </summary> 
    /// <param name="commands"></param> 
    /// <returns></returns> 

    public Image ConvertStringtoImage(string commands) 
    { 

     byte[] photoarray = Convert.FromBase64String(commands); 
     MemoryStream ms = new MemoryStream(photoarray, 0, photoarray.Length); 
     ms.Write(photoarray, 0, photoarray.Length); 
     Image image = System.Drawing.Image.FromStream(ms); 
     return image; 

    } 


    /// <summary> 
    ///2. Read picture from Database and return as image 
    /// just change the mysql to sql server type. 
    /// </summary> 
    /// <param name="commands"></param> 
    /// <returns></returns> 

    public Image Readphotofromdb(string commands) 
    { 
     Image image = null; 
     using (MySqlConnection dbConn = new MySqlConnection(connector)) 
     { 
      using (MySqlCommand cmd = new MySqlCommand(commands, dbConn)) 
      { 
       dbConn.Open(); 
       using (MySqlDataReader reader = cmd.ExecuteReader()) 
       { 
        if (reader.Read()) 
        { 
         byte[] photoarray = Convert.FromBase64String(reader.GetString(0)); 
         MemoryStream ms = new MemoryStream(photoarray, 0, photoarray.Length); 
         ms.Write(photoarray, 0, photoarray.Length); 
         image = new Bitmap(ms); 

        } 
       } 
      } 
     } 
     MySqlConnection.ClearAllPools(); 
     return image; 

    } 

    /// <summary> 
    /// 3. Convert Image to base64 string 
    /// </summary> 
    /// <param name="image"></param> 
    /// <returns></returns> 


    public string ConvertImageToString(Image image) 
    { 
     byte[] byteArray = new byte[0]; 
     using (MemoryStream stream = new MemoryStream()) 
     { 
      image.Save(stream, System.Drawing.Imaging.ImageFormat.Png); 
      stream.Close(); 
      byteArray = stream.ToArray(); 
     } 
     string base64String = Convert.ToBase64String(byteArray); 
     return base64String; 
    } 
関連する問題