2014-02-21 3 views
1

Я хочу вернуть изображение через веб-интерфейс API. Я пытаюсь получить изображение, изменить размер изображения и вернуть его. Вот мой код ...Обратное изображение через RESTful webservice

public Image GetImage(string url) 
{ 
    WebClient wc = new WebClient(); 
    byte[] data = wc.DownloadData(url); 
    MemoryStream memstream = new MemoryStream(data); 
    Image img = Image.FromStream(memstream); 
    img = resize(img, new System.Drawing.Size(100, 100)); 

    return img; 
} 

protected static System.Drawing.Image resize(System.Drawing.Image imgToResize, System.Drawing.Size size) 
{ 
    return (System.Drawing.Image)(new System.Drawing.Bitmap(imgToResize, size)); 
} 

И тогда в идеале, я хотел бы быть в состоянии сделать что-то вроде этого через HTML ...

<img src="http://localhost:23520/Image/GetImage?url=whatever" /> 

Это, очевидно, не работает. Есть ли способ получить этот тег изображения для отображения изображения, возвращаемого службой RESTful?

+0

Я не уверен, что будет работать на все. Я бы предпочел отправить Base64String этого изображения, а затем преобразовать его в Bitmap или BitmapImage на стороне клиента и применить его там. Вы пробовали/думали об этом? Я уверен, вы не можете просто вернуть объект «Image». Кроме того, свойство 'src' требует URL-адреса и возврата объекта Image из вашего метода GetImage, так что это не сработает. – Subby

ответ

3

Нужно ли быть ави-вызовом?

Настоятельно рекомендую использовать общий обработчик для этого.

Вот небольшой учебник по нему: http://www.dotnetperls.com/ashx

Вы можете прочитать в изображении, сохранить его в памяти, изменить его размер, то выходное изображение непосредственно.

Если вы ид маршрут обработчика, это будет код необходимо

WebClient wc = new WebClient(); 
byte[] data = wc.DownloadData(context.Request.QueryString.Get("url")); 
MemoryStream memstream = new MemoryStream(data); 
Image img = Image.FromStream(memstream); 
img = resize(img, new System.Drawing.Size(100, 100)); 
context.Response.Clear(); 
context.Response.ClearHeaders(); 
img.Save(context.Response.OutputStream, ImageFormat.Jpeg); 
context.Response.ContentType = "image/jpeg"; 
HttpContext.Current.ApplicationInstance.CompleteRequest(); 

Тег изображения будет что-то вдоль линий

<img src="http://localhost:23520/Image/GetImage.ashx?url=whatever" />

+0

спасибо за это. Внедрен обработчик, и он работал – prawn

1

Я рекомендую вам отправить изображение в формате base64

и установить его на изображение

<img src="data:image/gif;base64,<YOUR DATA>" alt="Base64 encoded image" /> 

URL в base64 вы можете использовать

public String ConvertImageURLToBase64(String url) 
{ 
    StringBuilder _sb = new StringBuilder(); 

    Byte[] _byte = this.GetImage(url); 

    _sb.Append(Convert.ToBase64String(_byte, 0, _byte.Length)); 
    return _sb.ToString(); 
} 
Смежные вопросы