package com.izouma.nineth.utils;

import net.coobird.thumbnailator.Thumbnails;
import org.pngquant.PngQuant;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class ImageUtils {

    public static BufferedImage resizeJpg(InputStream image, int width, int height, boolean compress) throws IOException {
        BufferedImage bufferedImage = ImageIO.read(image);
        return resizeJpg(bufferedImage, width, height, compress);
    }

    public static BufferedImage resizeJpg(BufferedImage bufferedImage, int width, int height, boolean compress) throws IOException {
        return Thumbnails.of(bufferedImage)
                .size(Math.min(width, bufferedImage.getWidth()), Math.min(height, bufferedImage.getHeight()))
                .outputFormat("jpg")
                .outputQuality(compress ? 0.7 : 1.0)
                .asBufferedImage();
    }

    public static BufferedImage resizePng(InputStream image, int width, int height, boolean compress) throws IOException {
        BufferedImage bufferedImage = ImageIO.read(image);
        return resizePng(bufferedImage, width, height, compress);
    }

    public static BufferedImage resizePng(BufferedImage bufferedImage, int width, int height, boolean compress) throws IOException {
        if (compress) {
            BufferedImage img = Thumbnails.of(bufferedImage)
                    .size(Math.min(width, bufferedImage.getWidth()), Math.min(height, bufferedImage.getHeight()))
                    .outputFormat("png")
                    .outputQuality(1.0)
                    .asBufferedImage();
            PngQuant pngQuant = new PngQuant();
            return pngQuant.getRemapped(img);
        } else {
            return Thumbnails.of(bufferedImage)
                    .size(Math.min(width, bufferedImage.getWidth()), Math.min(height, bufferedImage.getHeight()))
                    .outputFormat("png")
                    .outputQuality(1.0)
                    .asBufferedImage();
        }
    }

    public static void main(String[] args) throws IOException {
        ImageUtils.resizePng(new FileInputStream("/Users/drew/Downloads/盲盒详情.png"), 1000, 2000, true);
        PngQuant pngQuant = new PngQuant();
        ImageIO.write(pngQuant
                        .getRemapped(ImageIO.read(new File("/Users/drew/Desktop/1.png"))),
                "png", new File("/Users/drew/Desktop/2.png"));
    }
}
