图片处理练习(Java)

    今天准备更新Topcoder时候碰到一个图片转换的问题。Topcoder题目里面的图是黑底白字的,但是博客中一般是白底黑字的,本来是想使用photoshop来处理一下,但是很难的碰到这么一个简单的图片处理的问题,因此就尝试使用java的图片处理的类来自己处理了一下,效果觉得还不错。
    中间也没有遇到什么大问题,主要是由于cut下来的原图是有损的jpg图,因此造成字体不是严格意义上的白色(RGB=FFFFFF),所以试了几个阈值后达到了比较好的效果。
  1. package image;
  2. import java.awt.image.BufferedImage;
  3. import java.io.File;
  4. import javax.imageio.ImageIO;
  5. /**
  6.  * 图片转色程序,将一幅颜色不很规则的黑底白色的图转换成白底黑字的图
  7.  * 主要尝试一下java的图片操作
  8.  * */
  9. public class ImageTest {
  10.     private int threshold = 190;
  11.     private String outputFileName="c:/aaa.jpg";
  12.     public ImageTest() {
  13.     }
  14.     public ImageTest(int threshold,String outputFileName) {
  15.         this.threshold = threshold;
  16.         this.outputFileName=outputFileName;
  17.     }
  18.     public void converseColor(String fileName) {
  19.         try {
  20.             BufferedImage bf = ImageIO.read(new File(fileName));
  21.             for (int i = 0; i < bf.getHeight(); i++) {
  22.                 for (int k = 0; k < bf.getWidth(); k++) {
  23.                     String tmp = Integer.toHexString(bf.getRGB(k, i));
  24.                     tmp = tmp.substring(tmp.length() - 6);
  25.                     
  26.                     if (isWhite(tmp))
  27.                         bf.setRGB(k, i, Integer.parseInt("000000"16));
  28.                     else
  29.                         bf.setRGB(k, i, Integer.parseInt("ffffff"16));
  30.                 }
  31.             }
  32.             ImageIO.write(bf, "JPG"new File(outputFileName));
  33.         } catch (Exception e) {
  34.             e.printStackTrace();
  35.         }
  36.     }
  37.     private boolean isWhite(String src) {
  38.         int red = Integer.parseInt(src.substring(02), 16);
  39.         int green = Integer.parseInt(src.substring(24), 16);
  40.         int blue = Integer.parseInt(src.substring(46), 16);
  41.         if (red > threshold && green > threshold && blue > threshold)
  42.             return true;
  43.         return false;
  44.     }
  45.     public static void main(String[] args) {
  46.         new ImageTest(150,"c:/aaa.jpg").converseColor("c:/part.JPG");
  47.     }
  48. }
原图:

转换后图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值