- 浏览: 747886 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
梦行Monxin商城系统:
java网上商城与php网上商城比较 -
梦行Monxin商城系统:
java网上商城与php网上商城比较 -
任楚娴:
你好,请问html = nvl(html); 这句中的nvl( ...
java html串转换成文本串 -
u013246812:
,谢拉!
jQuery ui Dialog 讲解参数 -
大宝剑99:
...
前端优化
先将最基本的功能代码写出来
package com.mjp.images;
import java.awt.AlphaComposite;
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.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public final class ImageUtils {
/**
* 图片水印
* @param pressImg 水印图片
* @param targetImg 目标图片
* @param x 修正值 默认在中间
* @param y 修正值 默认在中间
* @param alpha 透明度
*/
public final static void pressImage(String pressImg, String targetImg, int x, int y, float alpha) {
try {
File img = new File(targetImg);
Image src = ImageIO.read(img);
int wideth = src.getWidth(null);
int height = src.getHeight(null);
BufferedImage image = new BufferedImage(wideth, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.drawImage(src, 0, 0, wideth, height, null);
//水印文件
Image src_biao = ImageIO.read(new File(pressImg));
int wideth_biao = src_biao.getWidth(null);
int height_biao = src_biao.getHeight(null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
g.drawImage(src_biao, (wideth - wideth_biao) / 2, (height - height_biao) / 2, wideth_biao, height_biao, null);
//水印文件结束
g.dispose();
ImageIO.write((BufferedImage) image, "jpg", img);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 文字水印
* @param pressText 水印文字
* @param targetImg 目标图片
* @param fontName 字体名称
* @param fontStyle 字体样式
* @param color 字体颜色
* @param fontSize 字体大小
* @param x 修正值
* @param y 修正值
* @param alpha 透明度
*/
public static void pressText(String pressText, String targetImg, String fontName, int fontStyle, Color color, int fontSize, int x, int y, float alpha) {
try {
File img = new File(targetImg);
Image src = ImageIO.read(img);
int width = src.getWidth(null);
int height = src.getHeight(null);
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.drawImage(src, 0, 0, width, height, null);
g.setColor(color);
g.setFont(new Font(fontName, fontStyle, fontSize));
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
g.drawString(pressText, (width - (getLength(pressText) * fontSize)) / 2 + x, (height - fontSize) / 2 + y);
g.dispose();
ImageIO.write((BufferedImage) image, "jpg", img);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 缩放
* @param filePath 图片路径
* @param height 高度
* @param width 宽度
* @param bb 比例不对时是否需要补白
*/
public static void resize(String filePath, int height, int width, boolean bb) {
try {
double ratio = 0.0; //缩放比例
File f = new File(filePath);
BufferedImage bi = ImageIO.read(f);
Image itemp = bi.getScaledInstance(width, height, bi.SCALE_SMOOTH);
//计算比例
if ((bi.getHeight() > height) || (bi.getWidth() > width)) {
if (bi.getHeight() > bi.getWidth()) {
ratio = (new Integer(height)).doubleValue() / bi.getHeight();
} else {
ratio = (new Integer(width)).doubleValue() / bi.getWidth();
}
AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null);
itemp = op.filter(bi, null);
}
if (bb) {
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.setColor(Color.white);
g.fillRect(0, 0, width, height);
if (width == itemp.getWidth(null))
g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2, itemp.getWidth(null), itemp.getHeight(null), Color.white, null);
else
g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null), itemp.getHeight(null), Color.white, null);
g.dispose();
itemp = image;
}
ImageIO.write((BufferedImage) itemp, "jpg", f);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
pressImage("d:\\imgtest\\sy.jpg", "d:\\imgtest\\test1.jpg", 0, 0, 0.5f);
pressText("水印文字", "d:\\imgtest\\test1.jpg", "黑体", 12, Color.white, 80, 0, 0, 0.3f);
resize("d:\\imgtest\\test1.jpg", 500, 500, true);
}
public static int getLength(String text) {
int length = 0;
for (int i = 0; i < text.length(); i++) {
if (new String(text.charAt(i) + "").getBytes().length > 1) {
length += 2;
} else {
length += 1;
}
}
return length / 2;
}
}
==============================
后续再写一个web应用 使用过滤的方式来处理
package com.mjp.images;
import java.awt.AlphaComposite;
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.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public final class ImageUtils {
/**
* 图片水印
* @param pressImg 水印图片
* @param targetImg 目标图片
* @param x 修正值 默认在中间
* @param y 修正值 默认在中间
* @param alpha 透明度
*/
public final static void pressImage(String pressImg, String targetImg, int x, int y, float alpha) {
try {
File img = new File(targetImg);
Image src = ImageIO.read(img);
int wideth = src.getWidth(null);
int height = src.getHeight(null);
BufferedImage image = new BufferedImage(wideth, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.drawImage(src, 0, 0, wideth, height, null);
//水印文件
Image src_biao = ImageIO.read(new File(pressImg));
int wideth_biao = src_biao.getWidth(null);
int height_biao = src_biao.getHeight(null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
g.drawImage(src_biao, (wideth - wideth_biao) / 2, (height - height_biao) / 2, wideth_biao, height_biao, null);
//水印文件结束
g.dispose();
ImageIO.write((BufferedImage) image, "jpg", img);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 文字水印
* @param pressText 水印文字
* @param targetImg 目标图片
* @param fontName 字体名称
* @param fontStyle 字体样式
* @param color 字体颜色
* @param fontSize 字体大小
* @param x 修正值
* @param y 修正值
* @param alpha 透明度
*/
public static void pressText(String pressText, String targetImg, String fontName, int fontStyle, Color color, int fontSize, int x, int y, float alpha) {
try {
File img = new File(targetImg);
Image src = ImageIO.read(img);
int width = src.getWidth(null);
int height = src.getHeight(null);
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.drawImage(src, 0, 0, width, height, null);
g.setColor(color);
g.setFont(new Font(fontName, fontStyle, fontSize));
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
g.drawString(pressText, (width - (getLength(pressText) * fontSize)) / 2 + x, (height - fontSize) / 2 + y);
g.dispose();
ImageIO.write((BufferedImage) image, "jpg", img);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 缩放
* @param filePath 图片路径
* @param height 高度
* @param width 宽度
* @param bb 比例不对时是否需要补白
*/
public static void resize(String filePath, int height, int width, boolean bb) {
try {
double ratio = 0.0; //缩放比例
File f = new File(filePath);
BufferedImage bi = ImageIO.read(f);
Image itemp = bi.getScaledInstance(width, height, bi.SCALE_SMOOTH);
//计算比例
if ((bi.getHeight() > height) || (bi.getWidth() > width)) {
if (bi.getHeight() > bi.getWidth()) {
ratio = (new Integer(height)).doubleValue() / bi.getHeight();
} else {
ratio = (new Integer(width)).doubleValue() / bi.getWidth();
}
AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null);
itemp = op.filter(bi, null);
}
if (bb) {
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.setColor(Color.white);
g.fillRect(0, 0, width, height);
if (width == itemp.getWidth(null))
g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2, itemp.getWidth(null), itemp.getHeight(null), Color.white, null);
else
g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null), itemp.getHeight(null), Color.white, null);
g.dispose();
itemp = image;
}
ImageIO.write((BufferedImage) itemp, "jpg", f);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
pressImage("d:\\imgtest\\sy.jpg", "d:\\imgtest\\test1.jpg", 0, 0, 0.5f);
pressText("水印文字", "d:\\imgtest\\test1.jpg", "黑体", 12, Color.white, 80, 0, 0, 0.3f);
resize("d:\\imgtest\\test1.jpg", 500, 500, true);
}
public static int getLength(String text) {
int length = 0;
for (int i = 0; i < text.length(); i++) {
if (new String(text.charAt(i) + "").getBytes().length > 1) {
length += 2;
} else {
length += 1;
}
}
return length / 2;
}
}
==============================
后续再写一个web应用 使用过滤的方式来处理
发表评论
-
全国最新行政区划代码(Tree)json数据以及地理数据
2020-11-11 21:23 382基于阿里提供的地理数据 http://datav.aliyun ... -
小知识点--解锁 AppChecker ping ip
2019-06-19 08:40 442在使用AppChecker 进行主动拨测的时候,目 ... -
记录年会小系统
2018-02-04 14:42 1144有点意思,年会过后,抽奖活动saas小系统扒光看看:支持P ... -
jdbc方式以 sys账号连接oracle数据的问题
2017-08-22 10:44 484多年以后,在操作oracle 时 发现 jdbc 连 ... -
proguard 代码混淆
2016-11-22 10:59 692url:http://proguard.sourceforg ... -
solr 表达式意义
2015-02-03 19:29 7791. “:”指定字段查指定值,如返回所有值*:* 2. “? ... -
solr 安装配置
2015-02-03 13:15 747solr 安装配置步骤: 1 首先下载solr(最新 ... -
javax.net.ssl.SSLKeyException: RSA premaster secre临时解决方案
2014-11-25 19:38 4420javax.net.ssl.SSLKeyException ... -
compass 小知识点
2014-09-15 10:22 940今天发现排序不管事, 查了一下:索引的问题:排序的列不进 ... -
java_opts 常用
2014-08-14 13:16 1221JVM设置,可以查考如下配置example:# Memory ... -
RPC Socket 服务调用模型
2014-04-09 16:14 602最近在看Dubbo 服务框架, 通过RPC 实现了输入和 ... -
JVM 基本参数
2014-04-03 11:49 789基本的JVM参数:-classpath, -cp: 设置类搜 ... -
eclipse 快捷键失效解决方法
2014-01-17 17:20 722有时候eclispe快捷键失效了,编码起来太难受了。 ... -
Compass+ lucene 通用代码(脱离数据库)
2013-11-08 15:09 920最近需要通过检索分类的方式进行处理,所以就写了接口与实 ... -
DEBUG远程tomcat
2013-08-21 13:35 1003一、在windows系统中:打开%CATALINE_H ... -
自动获取网页内容,然后写入excel文档中
2013-07-05 15:22 3451今天需要将北京物业公司名称以及电话给整理出来,发现爱帮 ... -
继续学习jersey+spring 构建RESTful风格 webservice
2013-03-13 10:36 3462j先说一下springmvc rest风格 spring ... -
尽量少使用jaxb 进行xml与对象互换
2013-03-09 17:33 1354尽量少使用jaxb 进行xml与对象互换 问题不少,这个好 ... -
Cookie path的设置
2013-02-21 10:58 1952cookie path 设置 IE对如下的co ... -
http 相关知识点
2012-10-11 10:49 1066Host头域 Host头域指定请求资源的Intenet主机和 ...
相关推荐
总结来说,Java提供了丰富的API来处理图片水印和大小改变,而Struts2则提供了强大的Web开发支持。结合这两者,我们可以构建出高效、灵活的图片处理服务。理解并熟练掌握这些技术,对于提升Java Web开发能力大有裨益...
在Java Web开发中,图片处理是一项常见的需求,无论是用于网站展示、用户上传的头像处理,还是电商系统中的商品图片优化。本项目专注于图片的压缩功能,提供了简单易用的API,可以对图片进行缩放和降质处理,并且...
logo图片水印则是将一个图片作为水印,通常设置合适的透明度并定位到合适的位置。 3. **文字大小行数位置匹配**:在添加文字水印时,需要考虑文字的大小、行数和位置。这通常需要计算文字的宽度和高度,根据图像...
针对网页图片添加水印,用java语言编写,很简单。 // 获取水印图片的路径 String planeImage = request.getSession().getServletContext().getRealPath("/image").replace("\\", "/")+"/"+"symark.png"; //获取目标...
此外,预览也可以帮助用户确认水印设置是否正确。 接下来,**文字水印**是在图像上添加文本,常用于版权保护或品牌标识。实现方法有多种,例如使用图像处理库如Python的PIL或JavaScript的sharp。在服务器端,处理...
此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...
在Java Web开发中,图片水印是一项常见需求,它可以用于保护版权或增加信息。本文将深入讲解如何使用Java实现图片水印,包括单文字水印、单图片水印、多文字水印以及多图片水印的开发。 ### 单文字水印开发 单文字...
在Spring Boot框架中实现图片上传并添加水印的功能,是一个常见的需求,特别是在开发涉及多媒体内容的Web应用时。下面将详细介绍这个过程,并涵盖相关的技术点。 首先,我们需要了解Spring Boot如何处理文件上传。...
此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...
在Java Web应用中,图片处理是一项常见的需求,用于优化用户体验,增强安全性,或者进行个性化定制。ImageDeal项目针对这些需求提供了强大的解决方案,包括图片的放大、缩小和加水印等功能。接下来,我们将深入探讨...
此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...
对于多个图片水印,同样地,遍历包含水印图片的列表,依次将每个水印图片添加到原始图片上,调整它们的大小和位置,以适应不同的布局需求。 5. **整合到Struts2框架** 在Struts2中,将上述操作封装成一个Action,...
Java 图片处理解决方案中,ImageMagick 是一个免费的创建、编辑、合成图片的软件,可以实现图片切割、颜色替换、图片缩略图、图片水印等各种效果。ImageMagick 是免费开源软件,支持大多数操作系统,包括 Linux、...
通过它,你可以轻松地在Java程序中执行如调整图片尺寸、添加水印、转换图片格式等操作。 7. **异常处理与反馈**: 在处理图片上传时,需要考虑各种可能出现的异常,如文件类型错误、文件过大、磁盘空间不足等,并...
本项目是基于Java Web技术栈,利用JSP、Struts1.2、Hibernate3.2和Spring3.0构建的一个图片处理程序,主要功能是为图片添加图片水印或文字水印。这个解决方案展示了如何在传统的MVC架构中整合多种技术,以实现复杂的...
此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...
本话题聚焦于“Java批量图片上传”,这通常涉及到Web应用中的文件上传功能,尤其是处理大量图片的情况。在Oracle数据库环境下,这些图片数据可能需要存储在数据库中或者与数据库紧密关联。 首先,我们要理解图片...
【标题】:“基于jsp实现图片网页视频加水印”这一项目是软件工程课程的一个实践作业,旨在通过Java Web技术实现在网页、图片以及视频上添加水印的功能。这个任务不仅涵盖了基本的编程技能,还涉及到了软件开发的全...
Java图片加水印,支持旋转和透明度设置 Java圆形按钮实例代码,含注释 Java圆形电子时钟源代码 Java多用户聊天室程序(毕业设计).rar Java大型CERP进销存系统.rar Java存储与读取对象.rar Java局域网通信——飞鸽传...