`

java 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应用 使用过滤的方式来处理
分享到:
评论
1 楼 xiaoxin5230 2010-11-10  
失真太严重了,请问压缩还有其他的好办法吗?

相关推荐

    java 图片水印 改变图片大小

    总结来说,Java提供了丰富的API来处理图片水印和大小改变,而Struts2则提供了强大的Web开发支持。结合这两者,我们可以构建出高效、灵活的图片处理服务。理解并熟练掌握这些技术,对于提升Java Web开发能力大有裨益...

    java web 图片压缩

    在Java Web开发中,图片处理是一项常见的需求,无论是用于网站展示、用户上传的头像处理,还是电商系统中的商品图片优化。本项目专注于图片的压缩功能,提供了简单易用的API,可以对图片进行缩放和降质处理,并且...

    java实现图片上传并添加水印效果(文字水印,蒙版,logo图片),自动进行文字大小行数位置匹配 ,文字自动换行

    logo图片水印则是将一个图片作为水印,通常设置合适的透明度并定位到合适的位置。 3. **文字大小行数位置匹配**:在添加文字水印时,需要考虑文字的大小、行数和位置。这通常需要计算文字的宽度和高度,根据图像...

    javaweb 做图片水印,水印图片到目录图片上去

    针对网页图片添加水印,用java语言编写,很简单。 // 获取水印图片的路径 String planeImage = request.getSession().getServletContext().getRealPath("/image").replace("\\", "/")+"/"+"symark.png"; //获取目标...

    上传 预览 文字水印 图片水印

    此外,预览也可以帮助用户确认水印设置是否正确。 接下来,**文字水印**是在图像上添加文本,常用于版权保护或品牌标识。实现方法有多种,例如使用图像处理库如Python的PIL或JavaScript的sharp。在服务器端,处理...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    JAVA图片水印开发案例详解

    在Java Web开发中,图片水印是一项常见需求,它可以用于保护版权或增加信息。本文将深入讲解如何使用Java实现图片水印,包括单文字水印、单图片水印、多文字水印以及多图片水印的开发。 ### 单文字水印开发 单文字...

    springboot实现上传图片添加水印

    在Spring Boot框架中实现图片上传并添加水印的功能,是一个常见的需求,特别是在开发涉及多媒体内容的Web应用时。下面将详细介绍这个过程,并涵盖相关的技术点。 首先,我们需要了解Spring Boot如何处理文件上传。...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    image_deal.rar_ImageDeal_image web java_web_segmention_加水印_缩小

    在Java Web应用中,图片处理是一项常见的需求,用于优化用户体验,增强安全性,或者进行个性化定制。ImageDeal项目针对这些需求提供了强大的解决方案,包括图片的放大、缩小和加水印等功能。接下来,我们将深入探讨...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    Struts2实现图片添加水印

    对于多个图片水印,同样地,遍历包含水印图片的列表,依次将每个水印图片添加到原始图片上,调整它们的大小和位置,以适应不同的布局需求。 5. **整合到Struts2框架** 在Struts2中,将上述操作封装成一个Action,...

    Java图片处理解决方案:ImageMagick快速入门教程.docx

    Java 图片处理解决方案中,ImageMagick 是一个免费的创建、编辑、合成图片的软件,可以实现图片切割、颜色替换、图片缩略图、图片水印等各种效果。ImageMagick 是免费开源软件,支持大多数操作系统,包括 Linux、...

    java 上传图片配置

    通过它,你可以轻松地在Java程序中执行如调整图片尺寸、添加水印、转换图片格式等操作。 7. **异常处理与反馈**: 在处理图片上传时,需要考虑各种可能出现的异常,如文件类型错误、文件过大、磁盘空间不足等,并...

    jsp添加图片水印程序

    本项目是基于Java Web技术栈,利用JSP、Struts1.2、Hibernate3.2和Spring3.0构建的一个图片处理程序,主要功能是为图片添加图片水印或文字水印。这个解决方案展示了如何在传统的MVC架构中整合多种技术,以实现复杂的...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    java批量图片上传

    本话题聚焦于“Java批量图片上传”,这通常涉及到Web应用中的文件上传功能,尤其是处理大量图片的情况。在Oracle数据库环境下,这些图片数据可能需要存储在数据库中或者与数据库紧密关联。 首先,我们要理解图片...

    基于jsp实现图片网页视频加水印

    【标题】:“基于jsp实现图片网页视频加水印”这一项目是软件工程课程的一个实践作业,旨在通过Java Web技术实现在网页、图片以及视频上添加水印的功能。这个任务不仅涵盖了基本的编程技能,还涉及到了软件开发的全...

    Java源码包100个设计实例.zip

    Java图片加水印,支持旋转和透明度设置 Java圆形按钮实例代码,含注释 Java圆形电子时钟源代码 Java多用户聊天室程序(毕业设计).rar Java大型CERP进销存系统.rar Java存储与读取对象.rar Java局域网通信——飞鸽传...

Global site tag (gtag.js) - Google Analytics