сжатие / изменение размера закодированного в base64 - PullRequest
0 голосов
/ 26 марта 2011

У меня было base64 кодировать изображение в строковом формате.Необходимо сжать / изменить его размер до другого размера, т.е. файлы изображений, созданные из этих сжатых / измененных по размеру кодированных изображений base64, имеют другой размер.

Какой алгоритм / jar сжатия / изменения размера можно использовать в Java?

Ответы [ 2 ]

1 голос
/ 26 марта 2011

Результатом сжатия почти всегда являются двоичные данные, а не строка ... в этот момент бессмысленно начинать преобразование base64.

Изображения обычно уже сжаты (большинство форматов используют сжатие), поэтому вы не получите особой выгоды. Если вам действительно нужны данные в строковом формате, вы можете попробовать сначала сжать исходные двоичные данные, используя GZipOutputStream и т. Д. И , а затем base64, но я сомневаюсь, что вы ' сэкономит много места.

0 голосов
/ 04 ноября 2016

Я использую эту функцию, чтобы вернуть изображение .7 размера.(Это было для скриншотов, возвращенных из Selenium .... изображение стало выглядеть довольно плохо, если я уменьшил его слишком сильно.):

public String SeventyPercentBase64(String in_image)
{

String imageData = in_image;

//convert the image data String to a byte[]
byte[] dta = DatatypeConverter.parseBase64Binary(imageData);
try (InputStream in = new ByteArrayInputStream(dta);) {
    BufferedImage fullSize = ImageIO.read(in);

    // Create a new image .7 the size of the original image
  double newheight_db = fullSize.getHeight() * .7;
  double newwidth_db = fullSize.getWidth() * .7;

    int newheight = (int)newheight_db;
    int newwidth = (int)newwidth_db;

    BufferedImage resized = new BufferedImage(newwidth, newheight, BufferedImage.SCALE_REPLICATE);

    Graphics2D g2 = (Graphics2D) resized.getGraphics();
  g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);

//draw fullsize image to resized image
  g2.drawImage(fullSize, 0, 0, newwidth, newheight, null);

    try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
        ImageIO.write( resized, "png", baos );
        baos.flush();
       byte[] resizedInByte = baos.toByteArray();
  Base64Encoder enc_resized = new Base64Encoder();
 String out_image = enc_resized.encode(resizedInByte);

    return out_image;
    }


 } catch (IOException e) {
   System.out.println("error resizing screenshot" + e.toString());
    return "";
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...