Code nén ảnh và chèn watermark vào ảnh bằng java

36 Thích Comment

Em share các bác đoạn code giúp nén ảnh còn 1/8 dung lượng so với ban đầu mà chất lượng giữ được 9/10
Kèm chèn logo hoặc text vào ảnh :

File jar cho các bác, máy các bác phải cài java nha
Link file jar: Các bác tải ở dưới bài viết nhé

Cách chạy :
Các bác vào thư mục chứa file jar đã tải
Bật cmd hoặc terminal lên
gõ : java -jar conpressImage.jar + đường dẫn đến thư mục chứa ảnh
Ví dụ: các bác lưu ảnh ở thư mục /home/image:
java -jar conpressImage.jar /home/image/

Ảnh sau khi nén sẽ thay thế ảnh gốc luôn ạ !!!!!!
Ví dụ ảnh các bác ban đầu là 1.6 Mb, sau khi nén chỉ còn tầm 200kb thôi!!!!!

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
public class mainTextToImage {
public static void main(String[] args) {
  
    String folder="đường dẫn thư mục chứa ảnh";
  
    File dir = new File(folder);
    ArrayList<String> names = new ArrayList<String>(Arrays.asList(dir.list()));
    System.out.println(names.size());

for(String name:names) {
  
    System.out.println(name);
    // chữ cần chèn
      String text = "điền chữ cần chèn";
        File input = new File(folder+name);
        File output = new File(folder+name);
        try {
            BufferedImage image = ImageIO.read(input);
            if (image==null) {
                continue;
            }
        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
            continue;
        }
      
        // adding text as overlay to an image
        try {
            addTextWatermark(text, "jpg", input, output);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            continue;
        }
}
    // overlay settings

    // overlay settings
}

private static void addTextWatermark (String text, String type, File source, File destination) throws Exception {
    BufferedImage image = ImageIO.read(source);

    // determine image type and handle correct transparency
    int imageType = "png".equalsIgnoreCase(type) ? BufferedImage.TYPE_INT_ARGB : BufferedImage.TYPE_INT_RGB;
    BufferedImage watermarked = new BufferedImage(image.getWidth(), image.getHeight(), imageType);
  

    // initializes necessary graphic properties
    Graphics2D w = (Graphics2D) watermarked.getGraphics();
    w.drawImage(image, 0, 0, null);
    AlphaComposite alphaChannel = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4f);
    w.setComposite(alphaChannel);
    w.setColor(Color.GRAY);
    w.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 40));
    FontMetrics fontMetrics = w.getFontMetrics();
    Rectangle2D rect = fontMetrics.getStringBounds(text, w);

    // calculate center of the image
    int centerX = (image.getWidth() - (int) rect.getWidth()) / 2;
    int centerY = image.getHeight() / 2;

    // add text overlay to the image
    w.drawString(text, centerX, centerY);
    ImageIO.write(watermarked, type, destination);
    w.dispose();
}
}

Nguồn: cafemmo

Bình luận bằng facebook
Có thể bạn thích
Tác giả: Sharescript.net

Trả lời

Email của bạn sẽ không được hiển thị công khai.