下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

这是我自己结合网上的一些资料封装的java图片处理类,支持图片的缩放,旋转,马赛克化。(转载请注明出处:

http://blog.csdn.net/u012116457)

不多说,上代码:

package deal;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.geom.AffineTransform;

import java.awt.image.AffineTransformOp;

import java.awt.image.BufferedImage;

import java.io.File;

import javax.imageio.ImageIO;

/**

* 图像处理类.

*

* @author nagsh

*

*/

public class ImageDeal {

String openUrl; // 原始图片打开路径

String saveUrl; // 新图保存路径

String saveName; // 新图名称

String suffix; // 新图类型 只支持gif,jpg,png

public ImageDeal(String openUrl,String saveUrl,String saveName,String suffix) {

this.openUrl = openUrl;

this.saveName = saveName;

this.saveUrl = saveUrl;

this.suffix = suffix;

}

/**

* 图片缩放.

*

* @param width

* 需要的宽度

* @param height

* 需要的高度

* @throws Exception

*/

public void zoom(int width,int height) throws Exception {

double sx = 0.0;

double sy = 0.0;

File file = new File(openUrl);

if (!file.isFile()) {

throw new Exception("ImageDeal>>>" + file + " 不是一个图片文件!");

}

BufferedImage bi = ImageIO.read(file); // 读取该图片

// 计算x轴y轴缩放比例--如需等比例缩放,在调用之前确保参数width和height是等比例变化的

sx = (double) width / bi.getWidth();

sy = (double) height / bi.getHeight();

AffineTransformOp op = new AffineTransformOp(

AffineTransform.getScaleInstance(sx,sy),null);

File sf = new File(saveUrl,saveName + "." + suffix);

Image zoomImage = op.filter(bi,null);

try {

ImageIO.write((BufferedImage) zoomImage,suffix,sf); // 保存图片

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 旋转

*

* @param degree

* 旋转角度

* @throws Exception

*/

public void spin(int degree) throws Exception {

int swidth = 0; // 旋转后的宽度

int sheight = 0; // 旋转后的高度

int x; // 原点横坐标

int y; // 原点纵坐标

File file = new File(openUrl);

if (!file.isFile()) {

throw new Exception("ImageDeal>>>" + file + " 不是一个图片文件!");

}

BufferedImage bi = ImageIO.read(file); // 读取该图片

// 处理角度--确定旋转弧度

degree = degree % 360;

if (degree < 0)

degree = 360 + degree;// 将角度转换到0-360度之间

double theta = Math.toRadians(degree);// 将角度转为弧度

// 确定旋转后的宽和高

if (degree == 180 || degree == 0 || degree == 360) {

swidth = bi.getWidth();

sheight = bi.getHeight();

} else if (degree == 90 || degree == 270) {

sheight = bi.getWidth();

swidth = bi.getHeight();

} else {

swidth = (int) (Math.sqrt(bi.getWidth() * bi.getWidth()

+ bi.getHeight() * bi.getHeight()));

sheight = (int) (Math.sqrt(bi.getWidth() * bi.getWidth()

+ bi.getHeight() * bi.getHeight()));

}

x = (swidth / 2) - (bi.getWidth() / 2);// 确定原点坐标

y = (sheight / 2) - (bi.getHeight() / 2);

BufferedImage spinImage = new BufferedImage(swidth,sheight,bi.getType());

// 设置图片背景颜色

Graphics2D gs = (Graphics2D) spinImage.getGraphics();

gs.setColor(Color.white);

gs.fillRect(0,swidth,sheight);// 以给定颜色绘制旋转后图片的背景

AffineTransform at = new AffineTransform();

at.rotate(theta,swidth / 2,sheight / 2);// 旋转图象

at.translate(x,y);

AffineTransformOp op = new AffineTransformOp(at,AffineTransformOp.TYPE_BICUBIC);

spinImage = op.filter(bi,spinImage);

File sf = new File(saveUrl,saveName + "." + suffix);

ImageIO.write(spinImage,sf); // 保存图片

}

/**

* 马赛克化.

* @param size 马赛克尺寸,即每个矩形的长宽

* @return

* @throws Exception

*/

public boolean mosaic(int size) throws Exception {

File file = new File(openUrl);

if (!file.isFile()) {

throw new Exception("ImageDeal>>>" + file + " 不是一个图片文件!");

}

BufferedImage bi = ImageIO.read(file); // 读取该图片

BufferedImage spinImage = new BufferedImage(bi.getWidth(),bi.getHeight(),bi.TYPE_INT_RGB);

if (bi.getWidth() < size || bi.getHeight() < size || size <= 0) { // 马赛克格尺寸太大或太小

return false;

}

int xcount = 0; // 方向绘制个数

int ycount = 0; // y方向绘制个数

if (bi.getWidth() % size == 0) {

xcount = bi.getWidth() / size;

} else {

xcount = bi.getWidth() / size + 1;

}

if (bi.getHeight() % size == 0) {

ycount = bi.getHeight() / size;

} else {

ycount = bi.getHeight() / size + 1;

}

int x = 0; //坐标

int y = 0;

// 绘制马赛克(绘制矩形并填充颜色)

Graphics gs = spinImage.getGraphics();

for (int i = 0; i < xcount; i++) {

for (int j = 0; j < ycount; j++) {

//马赛克矩形格大小

int mwidth = size;

int mheight = size;

if(i==xcount-1){ //横向最后一个比较特殊,可能不够一个size

mwidth = bi.getWidth()-x;

}

if(j == ycount-1){ //同理

mheight =bi.getHeight()-y;

}

// 矩形颜色取中心像素点RGB值

int centerX = x;

int centerY = y;

if (mwidth % 2 == 0) {

centerX += mwidth / 2;

} else {

centerX += (mwidth - 1) / 2;

}

if (mheight % 2 == 0) {

centerY += mheight / 2;

} else {

centerY += (mheight - 1) / 2;

}

Color color = new Color(bi.getRGB(centerX,centerY));

gs.setColor(color);

gs.fillRect(x,y,mwidth,mheight);

y = y + size;// 计算下一个矩形的y坐标

}

y = 0;// 还原y坐标

x = x + size;// 计算x坐标

}

gs.dispose();

File sf = new File(saveUrl,sf); // 保存图片

return true;

}

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

ImageDeal imageDeal = new ImageDeal("e://1.jpg","e://","2","jpg");

// 测试缩放

/* imageDeal.zoom(200,300); */

// 测试旋转

/* imageDeal.spin(90); */

//测试马赛克

/*imageDeal.mosaic(4);*/

}

}

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

java 给图片加马赛克_java处理图片--图片的缩放,旋转和马赛克化相关推荐

  1. java给图片加水印_Java 为图片添加水印(图片水印,文字水印)

    Java 为图片添加水印(图片水印,文字水印) 2014-07-28·WeaponX 5267 次浏览 ```java import java.awt.Color; import java.awt.F ...

  2. JAVA实现图片加水印及Base64图片字符串加水印

    JAVA实现图片加水印及Base64图片字符串加水印 可将根据不同需求选择场景一,场景二来实现家水印操作,个人感觉比我上一遍文章<base64字符串加水印 >实在 场景一: 涉及上送过来的 ...

  3. 火车头dede采集接口,图片加水印,远程图片本地化,远程无后缀的无图片本地化...

    <?php /*[LocoySpider] (C)2005-2010 Lewell Inc.火车采集器 DedeCMS 5.7 UTF8 文章发布接口 Update content: 图片加水印 ...

  4. img标签图片加载失败显示图片

    img标签图片加载失败显示图片 onerror="οnerrοr=null;src='../../image/community/initialize_img.png'"

  5. java马赛克_java实现图片缩放、旋转和马赛克化

    本文是作者结合网上的一些资料封装的java图片处理类,支持图片的缩放,旋转,马赛克化. 不多说,上代码: package deal; import java.awt.Color; import jav ...

  6. java图片马赛克_java实现图片缩放、旋转和马赛克化

    本文是作者结合网上的一些资料封装的java图片处理类,支持图片的缩放,旋转,马赛克化. 不多说,上代码: package deal; import java.awt.Color; import jav ...

  7. java图片转字符_java实现图片转字符图(看的过去的亚子)

    普通图片转换为ASSIC码灰度图片 原图: 效果图: 转换方法 读取图片文件到BufferedImage 读取BufferedImage中的RGB值 将RGB三色值按照(0.3,0.59,0.11)权 ...

  8. java图片加气泡文字,动态图片加气泡文字 微信动态图片加文字教程

    现在微信聊天少不了表情图片,这越有个性.独特的就越受大众喜爱,每每看到好看的图片时,大家也会忍不住收藏起来用.那你有没有想过自己P图呢?学一下PS图片创作一些独一无二的搞笑表情图,放在微信上秀秀吧,也 ...

  9. java图片加气泡文字_图片加气泡文字

    现在微信聊天少不了表情图片,这越有个性.独特的就越受大众喜爱,每每看到好看的图片时,大家也会忍不住收藏起来用.那你有没有想过自己P图呢?学一下PS图片创作一些独一无二的搞笑表情图,放在微信上秀秀吧,也 ...

最新文章

  1. halcon与QT联合:(5.2)瓶盖检测以及QT界面搭建
  2. 如何在SAP云平台上使用MongoDB服务
  3. ESI世界大学排名:371所内地高校上榜!
  4. struts2中struts.xml和web.xml文件解析及工作原理
  5. 【转载】Linux下有趣的命令
  6. SDHelper module加密系统解密
  7. 任务调度开源框架Quartz动态添加、修改和删除定时任务
  8. 操作系统之进程管理:7、进程同步、进程互斥
  9. python七段数码管绘制秒表_Python绘制七段数码管实例代码
  10. 【报告分享】见实私域流量白皮书:私域流量案例实操手册.pdf
  11. android-清单小文件
  12. 概率论与数理统计 重点篇
  13. 计算机考研数据结构代码题总结--Day01
  14. C语言lo如何优化运行界面,高质量程序优化总结整理【经典】
  15. 使用链表实现栈stack
  16. 商家们,不要得罪天猫和京东中的任何一个
  17. TreeView添加treeView1_NodeMouseClick----多么痛的领悟。。。
  18. Office Visio简介
  19. 苹果6如何截屏_苹果商量里需要花6元,才能买到的游戏:论如何建立一个修仙门派,到底好不好玩...
  20. 定点补码运算c语言,单选(3分) 下列关于补码定点运算的描述中,错误的是( )...

热门文章

  1. 人工智能领域有哪些优秀的工作第一次是被拒稿的,被什么拒了。现在怎么样? 拒稿理由是什么?...
  2. python类中函数互相调用记得带self
  3. opencv 图像 水平镜像翻转 函数
  4. mysql左连接多条件,on子句多条件
  5. 超详细的Linux安装及配置【fastDFS+nginx】处理海量图片传输与存储【报错解决】
  6. lodash.js - 根据不同字段筛选出的数组 转 对象 转 数组
  7. 网络科学导论 - network Science:an introduction 汪小帆版本
  8. 2022-1-23 牛客C++ 项目 —— signal 函数
  9. layui弹出层弹出另一个页面
  10. IDEA中如何查看现有分支是基于哪个分支创建的?