java实现上传寸照并剪裁,给寸照换背景_用java处置图片(jpg,png,gif.)的背景颜色

给寸照换背景__用java处理图片(jpg,png,gif...)的背景颜色

今天老师想让我帮忙把她们200多张寸照换成白底的,这些寸照里面多为蓝色底,红色底。

用ps??不!

用java!!

对,我第一反应就是用java,到网上找到了一个获得图片像素的源码。动手改了下,就编出来了,200多张照片的处理就用了半分钟。

由于实在是忘记了这个源码是哪儿找的了,貌似好几个网站上面都有,所以也就不标明作者是谁了....

/**

* 功能:

* 将蓝底寸照批量转换为白底

* 主要是可以几百张,几千张地处理

* @author 赵俊夫

*

*/

public class ImageColorDemo {

public static void main(String args[]) throws IOException {

/**

* 要处理的图片目录

*/

File dir = new File("d:/d4");

/**

* 列出目录中的图片,得到数组

*/

File[] files = dir.listFiles();

/**

* 遍历数组

*/

for(int x=0;x

/**

* 定义一个RGB的数组,因为图片的RGB模式是由三个 0-255来表示的 比如白色就是(255,255,255)

*/

int[] rgb = new int[3];

/**

* 用来处理图片的缓冲流

*/

BufferedImage bi = null;

try {

/**

* 用ImageIO将图片读入到缓冲中

*/

bi = ImageIO.read(files[x]);

} catch (Exception e) {

e.printStackTrace();

}

/**

* 得到图片的长宽

*/

int width = bi.getWidth();

int height = bi.getHeight();

int minx = bi.getMinX();

int miny = bi.getMinY();

System.out.println("正在处理:"+files[x].getName());

/**

* 这里是遍历图片的像素,因为要处理图片的背色,所以要把指定像素上的颜色换成目标颜色

* 这里 是一个二层循环,遍历长和宽上的每个像素

*/

for (int i = minx; i < width; i++) {

for (int j = miny; j < height; j++) {

// System.out.print(bi.getRGB(jw, ih));

/**

* 得到指定像素(i,j)上的RGB值,

*/

int pixel = bi.getRGB(i, j);

/**

* 分别进行位操作得到 r g b上的值

*/

rgb[0] = (pixel & 0xff0000) >> 16;

rgb[1] = (pixel & 0xff00) >> 8;

rgb[2] = (pixel & 0xff);

/**

* 进行换色操作,我这里是要把蓝底换成白底,那么就判断图片中rgb值是否在蓝色范围的像素

*/

if(rgb[0]<155&&rgb[0]>0 && rgb[1]<256&&rgb[1]>105 && rgb[2]<256&&rgb[2]>105 ){

/**

* 这里是判断通过,则把该像素换成白色

*/

bi.setRGB(i, j, 0xffffff);

}

}

}

System.out.println("\t处理完毕:"+files[x].getName());

System.out.println();

/**

* 将缓冲对象保存到新文件中

*/

FileOutputStream ops = new FileOutputStream(new File("d:/d5/"+x+".jpg"));

ImageIO.write(bi,"jpg", ops);

ops.flush();

ops.close();

}

}

}

1 楼

nanali32

2012-04-25

最后输出文件如果D盘下不存在文件夹d5就会出现异常的,故要这样写:

String path = "d:/d5/" + x + ".jpg";

File file = new File(path);

file.getParentFile().mkdirs();//创建d5文件夹

还有一个问题如果图像(非背景)里包含有蓝色也会变成白色了吧?

2 楼

j夫子

2012-04-25

nanali32 写道

最后输出文件如果D盘下不存在文件夹d5就会出现异常的,故要这样写:

String path = "d:/d5/" + x + ".jpg";

File file = new File(path);

file.getParentFile().mkdirs();//创建d5文件夹

还有一个问题如果图像(非背景)里包含有蓝色也会变成白色了吧?

1 嗯 考虑到程序的完善  确实是要处理文件夹不存在 不过代码可以写更好点 把dir和filename用两个字符串存储 因为如果是多层的文件夹 你的代码也不能用了。。

icon_razz.gif 

2 当然在这段代码里面所有符合判断范围的颜色都会被替换

我昨天也考虑过 加点过滤条件,但是没有好的解决办法。不过昨天处理寸图还是够用了。不知道这位兄弟有无好办法。。

3 楼

nanali32

2012-04-25

mkdirs()方法是目的是:创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。如果是多层文件夹是一样可以用的,不存在的父目录一样自动创建。

能想到这种方法替换背景颜色还是不错的!

icon_smile.gif

4 楼

j夫子

2012-04-25

嗯,我看成makedir()了

icon_cry.gif

5 楼

南瓜静涵

2012-05-30

嘿嘿 这个不错 有想法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴回答你的问题!以下是Java实现图片剪裁和加水印的代码示例: 图片剪裁: ```java import java.awt.Image; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; public class ImageCropExample { public static void main(String[] args) throws Exception { File input = new File("input.jpg"); BufferedImage image = ImageIO.read(input); // 定义剪裁区域 Rectangle rect = new Rectangle(10, 10, 100, 100); BufferedImage cropped = image.getSubimage(rect.x, rect.y, rect.width, rect.height); File output = new File("output.jpg"); ImageIO.write(cropped, "jpg", output); } } ``` 图片加水印: ```java import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; public class ImageWatermarkExample { public static void main(String[] args) throws Exception { File input = new File("input.jpg"); BufferedImage image = ImageIO.read(input); // 创建Graphics2D对象 Graphics2D g2d = image.createGraphics(); // 设置水印文字字体、颜色和透明度 g2d.setFont(new Font("Arial", Font.BOLD, 36)); g2d.setColor(Color.RED); g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)); // 创建AffineTransform对象,设置水印文字旋转角度 AffineTransform at = new AffineTransform(); at.rotate(Math.toRadians(30), image.getWidth() / 2, image.getHeight() / 2); g2d.setTransform(at); // 绘制水印文字 g2d.drawString("Watermark", image.getWidth() / 2, image.getHeight() / 2); // 释放Graphics2D对象 g2d.dispose(); File output = new File("output.jpg"); ImageIO.write(image, "jpg", output); } } ``` 希望能帮到你,如果还有其他问题,请随时提出!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值