您的位置:首页 > 编程语言 > Java开发

图片处理练习(Java)

2008-12-30 15:55 441 查看
今天准备更新Topcoder时候碰到一个图片转换的问题。Topcoder题目里面的图是黑底白字的,但是博客中一般是白底黑字的,本来是想使用photoshop来处理一下,但是很难的碰到这么一个简单的图片处理的问题,因此就尝试使用java的图片处理的类来自己处理了一下,效果觉得还不错。
中间也没有遇到什么大问题,主要是由于cut下来的原图是有损的jpg图,因此造成字体不是严格意义上的白色(RGB=FFFFFF),所以试了几个阈值后达到了比较好的效果。
package image;

import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

/**
* 图片转色程序,将一幅颜色不很规则的黑底白色的图转换成白底黑字的图
* 主要尝试一下java的图片操作
* */
public class ImageTest {
private int threshold = 190;
private String outputFileName="c:/aaa.jpg";
public ImageTest() {
}

public ImageTest(int threshold,String outputFileName) {
this.threshold = threshold;
this.outputFileName=outputFileName;
}

public void converseColor(String fileName) {
try {
BufferedImage bf = ImageIO.read(new File(fileName));
for (int i = 0; i < bf.getHeight(); i++) {
for (int k = 0; k < bf.getWidth(); k++) {
String tmp = Integer.toHexString(bf.getRGB(k, i));
tmp = tmp.substring(tmp.length() - 6);

if (isWhite(tmp))
bf.setRGB(k, i, Integer.parseInt("000000", 16));
else
bf.setRGB(k, i, Integer.parseInt("ffffff", 16));
}
}
ImageIO.write(bf, "JPG", new File(outputFileName));
} catch (Exception e) {
e.printStackTrace();
}
}

private boolean isWhite(String src) {
int red = Integer.parseInt(src.substring(0, 2), 16);
int green = Integer.parseInt(src.substring(2, 4), 16);
int blue = Integer.parseInt(src.substring(4, 6), 16);
if (red > threshold && green > threshold && blue > threshold)
return true;
return false;
}

public static void main(String[] args) {
new ImageTest(150,"c:/aaa.jpg").converseColor("c:/part.JPG");

}

}
原图:



转换后图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: