Silverlight - частичная или прогрессивная загрузка больших изображений для миниатюр? - PullRequest
2 голосов
/ 22 января 2010

У меня есть несколько больших изображений (в мегабайтах), которые я хотел бы быстро просмотреть в виде миниатюр (в килобайтах). Я хотел бы избежать хранения 2 изображений на сервере (одно для большого изображения и одно для миниатюр).

  • Изображения хранятся с BLOB-объектами Azure
  • Я посмотрел в глубину, кажется, она не обрабатывает динамические изображения.

РЕДАКТИРОВАТЬ: тип содержимого изображений на Azure "application / octet-stream". Может быть, изменение это поможет?

Есть идеи?

Ответы [ 2 ]

1 голос
/ 22 января 2010

Альтернативой загрузке всего изображения и без сохранения дополнительной миниатюры может быть создание миниатюрной копии на лету на сервере. Это было бы дорого. По-моему, я подозреваю, что вы на самом деле имеете в виду, что вы не хотите, чтобы поставщик изображений предоставил два изображения. Можно было бы предположить, что создание миниатюры с сохранением этой копии для будущего использования будет приемлемым.

Вот фрагмент кода, который я использую на стороне сервера для уменьшения изображения: -

    private Bitmap ScaleImage(Image img, int divisor)
    {
        int toWidth = Math.Max(img.Width / divisor, 1);
        int toHeight = Math.Max(img.Height / divisor, 1);
        Bitmap result = new Bitmap(toWidth, toHeight);
        using (Graphics canvas = Graphics.FromImage(result))
        {
            canvas.DrawImage(img, 0, 0, toWidth, toHeight);
        }
        return result;
    }

Затем вы можете вернуть изображение в некоторый BLOB-поток с помощью: -

img.Save(someStream, ImageFormat.Jpeg);
0 голосов
/ 22 января 2010

Почему вы хотите избежать хранения изображений на сервере? Создание миниатюрных изображений на сервере во время выполнения из изображений размером в МБ будет иметь огромное влияние на производительность. Сказав это, я думаю, вы могли бы сгенерировать их во время выполнения при первом запросе, а затем сохранить их в папке кэша. Когда они запрашиваются в следующий раз, вы просто загружаете их из кэша и отправляете прямо обратно.

...