2011-09-23 3 views
2

Мне нужно управлять некоторыми изображениями, взятыми у клиента.GoogleAppEngine: как предотвратить изменение размера изображения для больших изображений

До сих пор, мой код выглядит следующим образом:

Image oldImage = null; 
    try { 
     oldImage = ImagesServiceFactory.makeImage(imageBuf); 
    } catch (Exception e) { 
     log.severe("Cannot make the image due to " + e); 
     return; 
    } 
    int newWidth = ??; //how can I guess this value to reach a size < 1MB?? 
    int newHeight= ??; //how can I guess this value to reach a size < 1MB?? 
    Transform resize = ImagesServiceFactory.makeResize(newWidth, newHeight); 
    Image newImage = imagesService.applyTransform(resize, oldImage); //Exception if > 1MB 

Такие изображения могут превышать предельный размер GAE (1 МБ), и я хотел бы, чтобы изменить размер или обрезать их, чтобы достичь размером чуть менее 1 МБ (скажем, 950 КБ).

Как достичь этой цели?

Я не могу напрямую использовать метод изменения размера, так как я не знаю точной ширины & Высота, на которую изображение должно быть изменено.

Кроме того, в зависимости от кодировки изображения (png, jpeg и т. Д.) Размер изображения может изменяться также с использованием фиксированной высоты и ширины.

У меня действительно нет эффективных идей о том, как решить эту проблему: единственный способ увидеть решение - продолжать попытки с более низкими и меньшими размерами, пока я не получу изображение с хорошим размером, но это, очевидно, неприемлемо в условия выступлений ...

Пожалуйста, помогите мне!

Большое спасибо

Bye

cghersi

+0

Зачем вам нужно, чтобы изображение было определенным размером файла? Если это связано с ограничениями API-вызовов, вы можете использовать Blobstore, как указывает bdonlan. –

ответ

2

Если вы храните изображения в blobstore, вы можете resize much larger images, чем вы можете передавая изображение через сервера приложений, с помощью функции getServingUrl(). Поскольку это не передает свои данные через API, это не ограничивается ограничениями размера ответа API.

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