Java JPG To Png

Я использую общий формат приложения для изображений как png. Любое загруженное изображение jpg по-прежнему сохраняется как png с использованием кода, как показано ниже.

java.awt.image.BufferedImage bufferedImage = ImageIO.read(jpgImagePAth);

 if(!IsExtensionPng(jpgImagePath)){
        ImageIO.write(bufferedImage, "png", new File(pptFolder, justNamePng));
  }

Но это сохраняет альфу, даже если ее не было в jpg, поэтому размер изображения составляет 2 МБ, а размер от 6 МБ до 16 МБ. Есть ли способ сохранить png без сохранения альфы?

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

2 ответа

Решение

Размер файла увеличивается не по альфа-каналу, а по типу файла. JPG использует сжатие с потерями; PNG - сжатие без потерь. Другими словами, JPG выбрасывает некоторые данные, чтобы уменьшить размер файла. Вот почему вы выбираете уровень "качество" при сохранении в JPG - это определяет, сколько выбрасывается.

Откуда ты знаешь, что у тебя есть альфа-канал? Если вы все еще хотите PNG и хотите быть уверены, что вы отбрасываете альфа-канал, установите тип изображения на BufferedImage.TYPE_RGB, например

BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_RGB);

Вы должны будете получить графический объект, связанный с вашим новым BufferedImage и скопировать jpg на него, а затем записать его. Этот вопрос не совсем совпадает с вашим, но содержит пример кода, который вы можете найти полезным.

Павел

Я не знаю точно, в какой вы ситуации. Но я должен сохранить JPEG JPEG. Единственное преимущество конвертирования JPEG в PNG - это потеря пространства на жестком диске.

Другие вопросы по тегам