не удалось уменьшить размер изображения с помощью java API изображений движка приложения Google - PullRequest
2 голосов
/ 04 апреля 2011

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

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

Забавная (или грустная) часть - это даже когда я вызываю изменение размера с такой же шириной и высотой, что и у оригинала (т.е. размеры не изменены) размер "преобразованного" изображения больше чем у оригинала

    final byte[] origData = .....;
    final ImagesService imagesService = ImagesServiceFactory.getImagesService();

    final Image origImage = ImagesServiceFactory.makeImage(oldDate);
    System.out.println("orig dimensions is " + origImage.getWidth() + " X " + origImage.getHeight());

    final Transform resize = ImagesServiceFactory.makeResize(origImage.getWidth(), origImage.getHeight());
    final Image newImage = imagesService.applyTransform(resize, origImage);
    final byte[] newImageData = newImage.getImageData();
    //newImageData.length > origData.length :-(

Ответы [ 2 ]

4 голосов
/ 04 апреля 2011

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

Общий формат JPEG , а также формат PNG имеют разные уровни сжатия, то есть настройку качества.У них может быть это, потому что они делают сжатия с потерями.В общем, изображения с большим количеством деталей (острые края) должны быть сжаты с высоким качеством, а размытые изображения - с низким качеством;как вы, вероятно, видели, маленькие изображения обычно более размытые, а большие - более четкие.

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

Редактировать: В вашем случае вручную установите низкое качество для кодирования, если вы начали с малогофайл (по сравнению с количеством пикселей), а затем, конечно, высокое качество, если верно обратное.Проведите несколько экспериментов, возможно, будет приемлема единая настройка качества для всех фотографий.

1 голос
/ 02 октября 2012

Ошибка, с которой я столкнулся, заключалась в том, что я запросил вывод PNG ... и размер изображения также не изменился.Сервис изображений молча игнорировал параметр качества.Согласно комментарию в реализации параметр качества учитывается только для JPEG .

...