2016-08-31 6 views
8

Я использую Microsoft Bot Framework с когнитивными сервисами для создания изображений из исходного изображения, которое пользователь загружает через бота. Я использую C#.Отправить изображение, а не ссылку

API Cognitive Services возвращает byte[] или Stream, представляющий обработанное изображение.

Как я могу отправить это изображение непосредственно пользователю? Все документы и образцы, похоже, указывают на то, что я должен разместить изображение как общедоступный URL-адрес и отправить ссылку. Я могу это сделать, но лучше не буду.

Кто-нибудь знает, как просто вернуть изображение, вроде как Caption Bot?

ответ

6

Вы должны быть в состоянии использовать что-то вроде этого: источник

var message = activity.CreateReply(""); 
message.Type = "message"; 

message.Attachments = new List<Attachment>(); 
var webClient = new WebClient(); 
byte[] imageBytes = webClient.DownloadData("https://placeholdit.imgix.net/~text?txtsize=35&txt=image-data&w=120&h=120"); 
string url = "data:image/png;base64," + Convert.ToBase64String(imageBytes) 
message.Attachments.Add(new Attachment { ContentUrl = url, ContentType = "image/png" }); 
await _client.Conversations.ReplyToActivityAsync(message); 
3

Изображения элементов изображения HTML может быть данные URI, который содержит изображение непосредственно, а не URL для загрузки изображения. Следующие перегруженные функции будут принимать любое допустимое изображение и кодировать его как строку URI данных JPEG, которая может быть предоставлена ​​непосредственно для свойства src элементов HTML для отображения изображения. Если вы заранее знаете формат изображения, вы можете сохранить некоторую обработку, не перекодируя изображение в формате JPEG, просто вернув изображение, закодированное в качестве базы 64, с соответствующим префиксом URI данных изображения.

public string ImageToBase64(System.IO.Stream stream) 
{ 
    // Create bitmap from stream 
    using (System.Drawing.Bitmap bitmap = System.Drawing.Bitmap.FromStream(stream) as System.Drawing.Bitmap) 
    { 
     // Save to memory stream as jpeg to set known format. Could also use PNG with changes to bitmap save 
     // and returned data prefix below 
     byte[] outputBytes = null; 
     using (System.IO.MemoryStream outputStream = new System.IO.MemoryStream()) 
     { 
      bitmap.Save(outputStream, System.Drawing.Imaging.ImageFormat.Jpeg); 
      outputBytes = outputStream.ToArray(); 
     } 

     // Encoded image byte array and prepend proper prefix for image data. Result can be used as HTML image source directly 
     string output = string.Format("data:image/jpeg;base64,{0}", Convert.ToBase64String(outputBytes)); 

     return output; 
    } 
} 

public string ImageToBase64(byte[] bytes) 
{ 
    using (System.IO.MemoryStream inputStream = new System.IO.MemoryStream()) 
    { 
     inputStream.Write(bytes, 0, bytes.Length); 
     return ImageToBase64(inputStream); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^