图片处理练习(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");
}
}
原图:
转换后图:
中间也没有遇到什么大问题,主要是由于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");
}
}
原图:
转换后图:
相关文章推荐
- java 图片数字图像处理之图片缩小
- Java图片处理开源框架Thumbnailator
- jQuery使用Base64 生成图片预览和java后台不同的接收处理方式
- java图片处理——多张图片合成一张Gif图片并播放或Gif拆分成多张图片
- Java将图片处理成背景透明的圆形图片
- 使用 Grapicmagick 和 Im4java 处理图片
- Java对图片的处理---缩放图像、图像切割、图像类型转换、彩色转为黑白
- Java 处理 iphone拍照后 图片EXIF属性翻转90度的方法
- Java图片处理
- Atitit.java图片图像处理attilax总结
- JAVAWEB开发之SpringMVC详解(二)——高级开发、数据回显、参数绑定集合、图片上传、json交互、validation校验、异常处理、RESTful支持、拦截器
- GraphicsMagick+im4java 图片处理
- JAVA图片处理
- Javc处理图片各种效果的类库Java Image Filters
- Java图片处理的类库:SimpleImage
- 用java 对图片的截图、拼接、合成处理、添加文字
- java 图片处理
- Java Image Filters实现图片特效处理
- java对图片的处理(保存和显示)
- java实现像素级图片文件处理