Не удается загрузить некоторые изображения в Windows Server 2008 - PullRequest
8 голосов
/ 15 апреля 2010

У меня есть приложение, работающее на Windows Server 2008, которое обрабатывает загруженные изображения. В настоящее время он успешно обрабатывает около 8000 изображений в день, создавая 11 различных размеров каждого изображения.

Проблема, с которой я сталкиваюсь, заключается в том, что иногда приложению не удается загрузить некоторые изображения, я получаю сообщение об ошибке «System.Runtime.InteropServices.ExternalException: общая ошибка возникла в GDI +.».

Загрузка может принимать только файлы с расширением JPEG (jpg / jpeg / jpe) или с типом JPEG MIME, и, насколько я могу судить, эти изображения действительно являются изображениями JPEG. Если я смотрю на файл изображения в проводнике Windows на сервере, он может успешно извлечь миниатюру из файла, но если я пытаюсь открыть его, я получаю сообщение об ошибке «Это неверный растровый файл, или его формат в настоящее время не поддерживается. " от краски.

Если я скопирую изображение на свой компьютер под управлением Windows 7, при открытии изображения проблем не возникнет. Он работает в Paint, Windows Photo Viewer, Adobe Bridge и Photoshop. Если я пытаюсь загрузить изображение с помощью Image.FromStream так же, как в приложении, запущенном на сервере, оно загружается просто отлично. (Я скопировал файл обратно на сервер, и он все еще не работает, поэтому в процессе копирования нет ничего, что изменило бы его.)

Когда я смотрю информацию об изображении в Bridge, я вижу, что изображения создаются с использованием Picasa 3.0, но кроме этого я не вижу в них ничего особенного. Я еще не обнаружил ни у кого такой же проблемы или подобных проблем с приложением Picasa.

Кто-нибудь сталкивался с подобной проблемой или знает, есть ли что-то особенное в изображениях, созданных с помощью Picasa? Существует ли какой-либо кодек изображений, который необходимо установить на сервере для обработки всех видов изображений JPEG?

Вот пример изображения, которое не загружается на сервер: gdi-example.jpg (192 кБ).

Ответы [ 2 ]

2 голосов
/ 22 апреля 2010

Из обмена экспертами я получил пример использования объекта BitmapImage для загрузки изображения и его сохранения в MemoryStream. BitmapImage может по какой-то причине загружать изображения, которые не могут быть объектами Bitmap.

Мне также пришлось загрузить данные из файла и передать их в BitmapImage как MemoryStream, чтобы он не блокировал файл.

Итак, это последний код (без регистрации), который я сейчас использую:

using WpfImaging = System.Windows.Media.Imaging;
...

byte[] data = File.ReadAllBytes(FileName);

Image master;
using (MemoryStream source = new MemoryStream(data)) {
  var img = new WpfImaging.BitmapImage();
  img.BeginInit();
  img.StreamSource = source;
  img.EndInit();
  WpfImaging.BmpBitmapEncoder encoder = new WpfImaging.BmpBitmapEncoder();
  using (MemoryStream m = new MemoryStream()) {
    encoder.Frames.Add(WpfImaging.BitmapFrame.Create(img));
    encoder.Save(m);
    master = new Bitmap(m);
  }
}
0 голосов
/ 06 июня 2012

Я думаю, что это должно быть что-то в информации заголовка EXIF, сгенерированной Picasa. У меня была такая же проблема - обработка тысяч изображений, но иногда некоторые не хотят обрабатывать. Я использовал исправление клонирования здесь: Как получить .Net для сохранения этого изображения?

...