`
齐晓威_518
  • 浏览: 618072 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

源图比例缩放生成高质量缩略图&给图片添加水印,并可调节水印图片的透明度

 
阅读更多

大家都知道一些比较常用的空间、博客、论坛,设置头像或上传图片到空间的时候都会自动生成帮你生产缩略图,在现在的网络中经常用到,这是用到了图片同比例缩放技术,下面我们通过一个实例来了解一下java中图片上传生成缩略图的方法以及图片上增加水印和调整水印的透明度。

import java.awt.AlphaComposite;

import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.Toolkit;

import java.awt.image.BufferedImage;

import java.awt.image.FilteredImageSource;

import java.awt.image.ImageFilter;

import java.awt.image.ImageProducer;

import java.io.File;

import java.io.IOException;

 

import javax.imageio.ImageIO;

import javax.swing.ImageIcon;

 

public class ImageUtils {

 

        /**

         * 按源图比例缩放,生成高质量缩略图

         * 

         * @param imageFile

         *            源图文件

         * @param thumbnailFile

         *            要保存到的缩略图文件

         * @param maxWidth

         *            缩略图的最大宽度

         * @param maxHeight

         *            缩略图的最大高度

         * @throws IOException

         *             读取源图imageFile出错,或者用户指定的thumbnailFile无法被创建时

         */

        public static void createThumbnail(File imageFile, File thumbnailFile,

                        int maxWidth, int maxHeight) throws IOException {

                if (imageFile == null) {

                        throw new IllegalArgumentException("图片文件不能为空!");

                }

                if (thumbnailFile == null) {

                        throw new IllegalArgumentException("缩略图文件不能为空!");

                }

                if (maxWidth <= 0) {

                        throw new IllegalArgumentException("宽度必须大于0");

                }

                if (maxHeight <= 0) {

                        throw new IllegalArgumentException("高度必须大于0");

                }

                try {

                        BufferedImage image = ImageIO.read(imageFile);

                        /** 源图宽和高 */

                        int imageWidth = image.getWidth();

                        int imageHeight = image.getHeight();

                        if (maxWidth >= imageWidth && maxHeight >= imageHeight)

                                return;

                        /** 按比例缩放图像 */

                        double scaleZ = (double) imageWidth / imageHeight;

                        if (scaleZ > 0) {

                                imageWidth = maxWidth;

                                imageHeight = (int) (maxWidth / scaleZ);

                        } else {

                                imageWidth = (int) (maxHeight * scaleZ);

                                imageHeight = maxHeight;

                        }

                        /**根据源图和缩略图宽高生成一张图片 */

                        ImageFilter filter = new java.awt.image.AreaAveragingScaleFilter(

                                        imageWidth, imageHeight);

                        ImageProducer producer = new FilteredImageSource(image.getSource(),

                                        filter);

                        Image newImage = Toolkit.getDefaultToolkit().createImage(producer);

                        ImageIcon imageIcon = new ImageIcon(newImage);

                        Image scaleImage = imageIcon.getImage();

                        BufferedImage thumbnail = new BufferedImage(imageWidth,

                                        imageHeight, BufferedImage.TYPE_INT_RGB);

                        Graphics2D g2d = thumbnail.createGraphics();

                        g2d.drawImage(scaleImage, 0, 0, null);

                        g2d.dispose();

                        ImageIO.write(thumbnail, "jpeg", thumbnailFile);

                } catch (IOException e) {

                        throw new IOException("不能生产缩略图文件,请检查文件!");

                }

        }

 

        /**

         * 给图片添加水印,并可调节水印图片的透明度

         * 

         * @param tragetFile

         *            目标图片文件

         * @param watermarkFile

         *            水印图片

         * @param x

         *            水印在目标图片的横坐标

         * @param y

         *            水印在目标图片的纵坐标

         * @param alpha

         *            透明度,必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字,值越小水印透明度越高

         * @throws IOException

         *             读取目标图片或水印图片出错时

         */

        public static void makeWatermark(File tragetFile, File watermarkFile,

                        int x, int y, float alpha) throws IOException {

                if (tragetFile == null) {

                        throw new IllegalArgumentException("图片文件不能为空");

                }

                if (watermarkFile == null) {

                        throw new IllegalArgumentException("缩略图不能为空");

                }

                if (alpha < 0 || alpha > 1) {

                        throw new IllegalArgumentException( "alpha必须是在0.0和1.1之间!");

                }

                try {

                        Image target = ImageIO.read(tragetFile);

                        int targetWidth = target.getWidth(null);

                        int targetHeight = target.getHeight(null);

                        Image watermark = ImageIO.read(watermarkFile);

                        int waterWidth = watermark.getWidth(null);

                        int waterHeight = watermark.getHeight(null);

                        BufferedImage bufferedImage = new BufferedImage(targetWidth,

                                        targetHeight, BufferedImage.TYPE_INT_RGB);

                        Graphics2D g2d = bufferedImage.createGraphics();

                        /** 从(0,0)坐标开始,把目标图像画进去 */

                        g2d.drawImage(target, 0, 0, targetWidth, targetHeight, null);

                        /** 透明度设置 */

                        g2d.setComposite(AlphaComposite.getInstance(

                                        AlphaComposite.SRC_ATOP, alpha));

                        /** 根据制定坐标(x,y),把水印图像画进去 */

                        g2d.drawImage(watermark, x, y, waterWidth, waterHeight, null);

                        g2d.dispose();

                        ImageIO.write(bufferedImage, "jpeg", tragetFile);

                } catch (IOException e) {

                        throw new IOException("不能读取文件,请检查目标文件及水印文件!");

                }

        }

 

        public static void main(String[] args) {

                try {

                        File file1 = new File("F:\\walerjava.gif");

                        createThumbnail(file1, new File("F:\\wj2.gif"), 50, 50);

                } catch (IOException e) {

                        e.printStackTrace();

                }

        }

}

分享到:
评论

相关推荐

    C#图片生成缩略图和图片水印

    在C#编程中,生成图片缩略图和添加水印是常见的图像处理任务,这在网站开发、应用程序设计以及各种媒体展示中都有广泛的应用。本文将深入探讨如何使用C#来实现这两个功能。 首先,我们来看一下如何创建图片的缩略图...

    struts2上传文件、生成缩略图、添加文字和图片水印

    在Web开发中,文件上传功能是常见的需求,而生成缩略图、添加文字和图片水印则是对上传图片进行处理的常用操作。下面将详细阐述这些知识点。 1. **Struts2文件上传** Struts2提供了强大的文件上传支持,主要依赖于...

    ASP.NET图片上传,生成缩略图,加文字、图片水印

    在ASP.NET开发中,处理图片上传、生成缩略图以及添加文字和图片水印是常见的需求,这些功能在网站设计、电商系统、社交媒体平台等应用中尤为重要。下面将详细讲解这些知识点。 首先,**ASP.NET图片上传**是网站与...

    PHP缩略图生成和图片水印制作

    4. **控制水印透明度**:可以控制水印的透明度,使水印与背景图片融合得更为自然,又可以清晰显示。 #### PHP代码实现 具体的PHP代码实现会涉及到GD库或Imagick库的使用,这些库提供了操作图片的各种函数。代码中...

    asp.net(#C)生成缩略图,加文字水印,加图片水印的类

    在ASP.NET (#C#)开发中,生成缩略图、添加文字水印和图片水印是常见的需求,尤其是在处理网站的图像展示或者保护版权时。下面将详细解释这些概念及其实现方式。 首先,生成缩略图是将一张较大的图片转换为较小尺寸...

    上传图片生成缩略图、图片水印、文字水印_aspx开发教程.rar

    在ASP.NET平台中,开发一个能够处理上传图片并生成缩略图、添加图片水印以及文字水印的功能是一项常见的需求。这个"上传图片生成缩略图、图片水印、文字水印_aspx开发教程.rar"文件很可能是包含了一系列的源代码、...

    Asp.net上传图片同时生成缩略图和水印图

    在ASP.NET中,上传图片并生成缩略图和水印图是一项常见的需求,特别是在创建网站或者应用程序时,需要处理用户上传的图像。以下是一个关于如何在ASP.NET中实现这个功能的详细说明。 首先,上传图片是通过HTML的`...

    超强的图片上传,加水印,以及生成缩略图

    本主题将深入探讨“超强的图片上传,加水印,以及生成缩略图”这一技术领域,结合给出的标签“缩略图”,“图片上传”,“水印”,我们将详细讲解相关知识点。 首先,图片上传是网站或应用中让用户上传图片的功能。...

    PHP图片上传、加水印及生成清晰缩略图等综合处理类

    这个类提供了创建高质量缩略图的方法,可以保持原始图片的宽高比,并通过插值算法确保缩略图的清晰度。开发者可以通过设定目标宽度和高度来生成不同尺寸的缩略图,同时可以指定是否等比例缩放,避免图片变形。 使用...

    缩略图、透明图片水印、文字水印

    本主题聚焦于“缩略图”、“透明图片水印”和“文字水印”的生成,这些都是图像处理中的关键元素,对于提升用户体验和保护版权至关重要。 首先,我们来看“高质量缩略图”。缩略图是在保持原图主要特征的基础上,将...

    上传图片生成水印缩略图

    在生成缩略图时,需要注意保持图片比例,防止变形,并可以设置固定的宽度或高度。 4. **WebApplication3**:这可能是一个基于某种Web框架(如ASP.NET MVC、Spring Boot等)的项目名称,表示一个实现了上述功能的...

    ASP.NET源码——上传图片生成缩略图、图片水印、文字水印.zip

    这个源码压缩包提供了一套实现图片处理功能的解决方案,包括上传图片、生成缩略图、添加图片水印以及文字水印。下面将详细阐述这些功能的实现原理和相关知识点。 1. 图片上传: 在ASP.NET中,用户可以通过表单提交...

    PHP上传多图片生成缩略图加水印类

    对于生成缩略图,我们可以通过计算比例,保持原图宽高比来缩放图片,然后使用`imagecopyresampled()`函数进行高质量的缩放。如果安装了Imagick扩展,其功能更强大,支持更多的图像格式和高级特效,生成缩略图的效果...

    ASP.NET-[其他类别]上传图片生成缩略图、图片水印、文字水印.zip

    在ASP.NET开发中,处理图像是一项常见的任务,包括上传图片、生成缩略图、添加水印(图片水印和文字水印)等。这个压缩包文件"ASP.NET-[其他类别]上传图片生成缩略图、图片水印、文字水印.zip"显然包含了一个示例...

    自动生成缩略图,加水印小工具

    这款工具的核心功能包括批量生成缩略图、添加水印以及对图片进行重命名,极大地提升了工作效率。 批量生成缩略图是这个工具的主打特性。在网页制作中,为了优化页面加载速度和提高用户体验,通常会将大尺寸的原图...

    图片操作-图片水印、文字水印、缩略图生成

    例如,可以创建一个名为`ImageProcessor`的类,包含添加图片水印、文字水印和生成缩略图的方法。同时,为了提高性能和用户体验,可以考虑使用异步操作,利用C#的async/await关键字来处理大文件。 总结来说,C#提供...

    C#生成缩略图,C#缩略图,C#水印

    在C#编程中,生成缩略图和添加水印是常见的图像处理任务,这主要涉及到对图像文件的操作和处理。以下是一些相关的知识点: 1. **C# 图像处理库**: C#中用于图像处理的主要库是System.Drawing命名空间,它提供了...

    .Net生成缩略图、水印图片

    在.NET框架中,生成缩略图和添加水印是常见的图像处理任务,广泛应用于网站、应用程序和各种多媒体项目。下面将详细介绍如何使用.NET来实现这些功能,并探讨如何优化图像大小,使其更适合网络传输。 首先,生成缩略...

    制作缩略图源码,生成带水印的缩略图

    在IT行业中,生成缩略图和添加水印是常见的图像处理任务,特别是在网站开发、社交媒体分享、图片存储服务等领域。这个“制作缩略图源码,生成带水印的缩略图”的项目显然关注的就是这一核心功能。接下来,我们将详细...

Global site tag (gtag.js) - Google Analytics