手写签名场景,为更符合签名效果,节省服务器存储空间,将原图二值化后,再将多于空白去裁去。
java中图像二值化有个小技巧,能够很方便将图像二值化,不用再重费心思去研究二值化过程,技巧在这个参数BufferedImage.TYPE_BYTE_BINARY
package com.test;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImageBinaryUtil {
public static void binaryImage(String source,String target) {
try {
BufferedImage image = ImageIO.read(new File(source));
int width = image.getWidth();
int height = image.getHeight();
// 重点,技巧在这个参数BufferedImage.TYPE_BYTE_BINARY
BufferedImage binaryImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_BINARY);
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int rgb = image.getRGB(x, y);
binaryImage.setRGB(x, y, rgb);
}
}
ImageIO.write(binaryImage, "jpg", new File(target));
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
long l = System.currentTimeMillis();
String source = "C:\\Users\\user\\Desktop\\1.jpg";
String target = "C:\\Users\\user\\Desktop\\1二3.jpg";
binaryImage(source, target);;
System.out.println(System.currentTimeMillis() - l);
}
}
原图
二值化效果图
裁去边白边紧包效果