base64でエンコードされた画像の圧縮/サイズ変更

base64 compression image-manipulation
base64でエンコードされた画像の圧縮/サイズ変更

文字列形式のbase64エンコードイメージがありました。 別のサイズに圧縮/サイズ変更する必要があります。 これらの圧縮/サイズ変更されたbase64エンコード画像から作成された画像ファイルは、サイズが異なります。

Javaで使用できる圧縮/サイズ変更アルゴリズム/ jarは何ですか?

  0  0


ベストアンサー

圧縮の出力は、ほとんどの場合、文字列ではなくバイナリデータです…​ その時点で、base64変換を最初から実行しても意味がありません。

通常、画像はすでに圧縮されているため(ほとんどの形式では圧縮が使用されます)、実際にはあまりメリットはありません。 実際に文字列形式のデータが必要な場合は、最初に `GZipOutputStream`などを使用して元のバイナリデータを_try_圧縮し、then base64でエンコードできますが、多くのスペースを節約できるとは思えません。

1


この関数を使用して、サイズ.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 "";
 }
}

0


タイトルとURLをコピーしました