Является ли мой метод Java для изменения размера и сжатия изображения Base64 к JPEG (с Imageio) эффективным и безопаснымJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Является ли мой метод Java для изменения размера и сжатия изображения Base64 к JPEG (с Imageio) эффективным и безопасным

Сообщение Anonymous »

Я написал метод (код ниже), что: < /p>

Изменение изображений, более 720px (сохранение соотношения сторон) < /li>
Платает прозрачность PNG на белом фоне RGB < /li>
Compreseses to Jpeg Использование Imageio с пользовательским качеством (1 - 1 < /> < /li> < /li> < /li> < /li> < /li> < /li> < /li> < /li> < /> < /li> < /> . /> < /ul>
Ищу отзывы: < /p>

Это эффективная, хорошо написанная и наилучшая практика? < /li>
Правильно ли прозрачность для белого? Слишком много качества?public static String convertBase64ToCompressedJpegBase64(
final String base64Image, final float quality) {
try {
// 1. Decode the input string (strip “data:*;base64,” prefix if present)
byte[] decoded = Base64.getDecoder()
.decode(base64Image.replaceFirst("^.*base64,", "").trim());

BufferedImage original = ImageIO.read(new ByteArrayInputStream(decoded));
if (original == null) { // invalid file
throw new BadRequestException(ErrorCode.INVALID_FIELD_FORMAT, "Logo");
}

// 2. Resize to max width = 720 px (maintaining aspect ratio)
final int maxWidth = 720;
if (original.getWidth() > maxWidth) {
float scale = (float) maxWidth / original.getWidth();
int newW = Math.round(original.getWidth() * scale);
int newH = Math.round(original.getHeight() * scale);

Image tmp = original.getScaledInstance(newW, newH, Image.SCALE_SMOOTH);
BufferedImage resized = new BufferedImage(newW, newH,
BufferedImage.TYPE_INT_ARGB);
Graphics2D g = resized.createGraphics();
g.drawImage(tmp, 0, 0, null);
g.dispose();
original = resized;
}

// 3. Flatten transparency → white and convert to RGB (JPEG needs it)
BufferedImage rgb = new BufferedImage(
original.getWidth(), original.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = rgb.createGraphics();
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, rgb.getWidth(), rgb.getHeight());
g2d.drawImage(original, 0, 0, null);
g2d.dispose();

// 4. Compress + write JPEG with chosen quality
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next();
ImageOutputStream ios = ImageIO.createImageOutputStream(baos);
writer.setOutput(ios);

ImageWriteParam p = writer.getDefaultWriteParam();
if (p.canWriteCompressed()) {
p.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
p.setCompressionQuality(quality); // 0 – 1
}
writer.write(null, new IIOImage(rgb, null, null), p);

ios.close();
writer.dispose();

return "data:image/jpeg;base64," +
Base64.getEncoder().encodeToString(baos.toByteArray());
} catch (Exception e) {
throw new BadRequestException(ErrorCode.INVALID_FIELD_FORMAT, "Logo");
}
}

< /code>
Я реализовал метод обработки изображений Base64 путем изменения размера, сглаживания прозрачности и сжатия их в JPEG с использованием Imageio. Я ожидал, что это:
уменьшить размер файла (особенно для логотипов PNG ~ 200–500KB)
Поддерживать приличное качество изображения после сжатия
Graint Proparency изящно для таких форматов, как PNG
Be Safe и эффективен для использования производства < /p>
Я в основном не неуверен в том, что это наилучший поход - в терминах качества кода, производительности и качества кода и качества кода и производительности.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... ith-imagei
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Imageio.ffmpeg.download () требует другой установки Imageio, и Imageio не установит другую версию
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Генерируйте JPEG-в-TIFF без повторного сжатия источника JPEG в Java
    Anonymous » » в форуме JAVA
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Javax.imageio.imageio Формат Формата
    Anonymous » » в форуме JAVA
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Zipexception - Неправильная проверка данных после javax.imageio.imageio.read (byte [])
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Что подразумевается под типом, безопасным для вывода или безопасным для ввода?
    Anonymous » » в форуме C#
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»