`

[转]Java缩略图类带水印(jpg,png)

    博客分类:
  • Java
 
阅读更多

 

package com.example;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.FileOutputStream;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class ImageHelper {

        /**
         * 生成缩略图 <br/>保存:ImageIO.write(BufferedImage, imgType[jpg/png/...], File);
         * 
         * @param source
         *            原图片
         * @param width
         *            缩略图宽
         * @param height
         *            缩略图高
         * @param b
         *            是否等比缩放
         * */
        public static BufferedImage Thumb(BufferedImage source, int width,
                        int height, boolean b) {
                // targetW,targetH分别表示目标长和宽
                int type = source.getType();
                BufferedImage target = null;
                double sx = (double) width / source.getWidth();
                double sy = (double) height / source.getHeight();

                if (b) {
                        if (sx > sy) {
                                sx = sy;
                                width = (int) (sx * source.getWidth());
                        } else {
                                sy = sx;
                                height = (int) (sy * source.getHeight());
                        }
                }
                
                if (type == BufferedImage.TYPE_CUSTOM) { // handmade
                        ColorModel cm = source.getColorModel();
                        WritableRaster raster = cm.createCompatibleWritableRaster(width,
                                        height);
                        boolean alphaPremultiplied = cm.isAlphaPremultiplied();
                        target = new BufferedImage(cm, raster, alphaPremultiplied, null);
                } else
                        target = new BufferedImage(width, height, type);
                Graphics2D g = target.createGraphics();
                // smoother than exlax:
                g.setRenderingHint(RenderingHints.KEY_RENDERING,
                                RenderingHints.VALUE_RENDER_QUALITY);
                g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
                g.dispose();
                return target;
        }

        /**
         * 图片水印
         * 
         * @param imgPath
         *            待处理图片
         * @param markPath
         *            水印图片
         * @param x
         *            水印位于图片左上角的 x 坐标值
         * @param y
         *            水印位于图片左上角的 y 坐标值
         * @param alpha
         *            水印透明度 0.1f ~ 1.0f
         * */
        public static void waterMark(String imgPath, String markPath, int x, int y,
                        float alpha) {
                try {
                        // 加载待处理图片文件
                        Image img = ImageIO.read(new File(imgPath));

                        BufferedImage image = new BufferedImage(img.getWidth(null), img
                                        .getHeight(null), BufferedImage.TYPE_INT_RGB);
                        Graphics2D g = image.createGraphics();
                        g.drawImage(img, 0, 0, null);

                        // 加载水印图片文件
                        Image src_biao = ImageIO.read(new File(markPath));
                        g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
                                        alpha));
                        g.drawImage(src_biao, x, y, null);
                        g.dispose();

                        // 保存处理后的文件
                        FileOutputStream out = new FileOutputStream(imgPath);
                        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
                        encoder.encode(image);
                        out.close();
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }

        /**
         * 文字水印
         * 
         * @param imgPath
         *            待处理图片
         * @param text
         *            水印文字
         * @param font
         *            水印字体信息
         * @param color
         *            水印字体颜色
         * @param x
         *            水印位于图片左上角的 x 坐标值
         * @param y
         *            水印位于图片左上角的 y 坐标值
         * @param alpha
         *            水印透明度 0.1f ~ 1.0f
         */

        public static void textMark(String imgPath, String text, Font font,
                        Color color, int x, int y, float alpha) {
                try {
                        Font Dfont = (font == null) ? new Font("宋体", 20, 13) : font;

                        Image img = ImageIO.read(new File(imgPath));

                        BufferedImage image = new BufferedImage(img.getWidth(null), img
                                        .getHeight(null), BufferedImage.TYPE_INT_RGB);
                        Graphics2D g = image.createGraphics();

                        g.drawImage(img, 0, 0, null);
                        g.setColor(color);
                        g.setFont(Dfont);
                        g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
                                        alpha));
                        g.drawString(text, x, y);
                        g.dispose();
                        FileOutputStream out = new FileOutputStream(imgPath);
                        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
                        encoder.encode(image);
                        out.close();
                } catch (Exception e) {
                        System.out.println(e);
                }
        }
}
 

 

 

分享到:
评论

相关推荐

    java处理图片,缩略图,添加水印,格式转换,Thumbnailator

    在Java编程环境中,处理图像是一项常见的任务,包括创建缩略图、添加水印、裁剪以及转换图片格式。这些操作可以用于网站上的图像展示、移动应用的资源优化或任何需要图像处理的项目。"Thumbnailator"是Java的一个...

    java缩略图jar包

    总的来说,“java缩略图jar包”(thumbnailator)是Java开发中创建和管理缩略图的高效工具,它的强大功能和简洁API降低了图像处理的门槛,使得开发者能够更加专注于业务逻辑,而不用过多关心底层的图像处理细节。...

    Java缩略图生成库之Thumbnailator应用说明

    Thumbnailator 是一个专为 Java 平台设计的高效且易于使用的图像处理库,尤其适用于生成缩略图。该库通过其简洁的 API 设计,极大地简化了从图像文件和图像对象创建缩略图的过程。只需要几行代码,用户就可以轻松...

    Thumbnailator.zip

    Thumbnailator是一款基于Java的图像处理库,用于生成缩略图和其他图像操作。它以其高效、易用和功能丰富而受到开发者的青睐。在Java应用程序中,如果需要对图像进行缩放、裁剪、添加水印或者进行其他效果处理,...

    低版本0.3.10Thumbnailator图像处理.zip

    Thumbnailator是一个功能丰富的开源Java库,它提供了一系列简便易用的API,可以帮助开发者快速实现图片的缩略图生成、裁剪、旋转、添加水印等常见操作。 首先,我们要了解Java图片处理的基本概念。在Java中,`java....

    google图片处理工具thumbnailator-0.4.8.jar

    在这个领域,thumbnailator是一个备受青睐的Java库,它提供了简单易用的API,用于快速创建图片缩略图和其他图片处理工作。本文将详细介绍thumbnailator库及其在图片处理中的应用。 thumbnailator是日本开发者...

    利用Thumbnailator轻松实现图片缩放、旋转与加水印

    在上述代码中,我们创建了一个 640x480 的缩略图,保持原图比例,逆时针旋转 90 度,输出质量为 90%,格式为 JPG,并在左上角添加了一个白色的文字水印。 在处理多个图片时,可以使用可迭代对象(如 List 或 Set)...

    thumbnailator

    5. **添加水印**:使用 `watermark()` 方法,可以轻松地在缩略图上添加文字或图像水印,这对于版权保护或品牌推广非常有用。 6. **批处理处理**:`Thumbnailator` 支持批量处理目录下的所有图像,这在处理大量图片...

    thumbnailator入门教程

    thumbnailator是一个Java库,用于创建、修改和转换图像,尤其是生成缩略图。这个库因其简洁的API和高效的性能而在开发者中受到欢迎。在本教程中,我们将探讨如何利用thumbnailator.jar快速上手生成缩略图。 ### 1. ...

    thumbnailator-0.4.8.zip

    Thumbnailator 是一个开源的Java库,它的主要功能是创建图片的缩略图,但同时也支持其他图片处理操作,如裁剪、旋转、调整大小、添加水印等。在版本0.4.8中,它可能已经包含了各种优化和改进,以提高性能和兼容性。 ...

    thumbnailator所需jar包.zip

    在Java开发中,经常需要处理图像,比如生成缩略图,调整尺寸,裁剪,旋转,甚至添加水印等。thumbnailator库提供了一系列方法,使得这些操作变得简单高效。它支持多种图像格式,如JPEG、PNG、GIF和BMP,并且能够处理...

    thumbnailator-0.4.7

    "thumbnailator-0.4.7" 是一个Java类库,专门用于生成图像的缩略图。这个库的出现使得开发者在处理图像时能够轻松快捷地创建缩略图,极大地简化了图片处理的工作流程。其核心特性在于其简单易用的API设计,使得即使...

    thumbnailator.zip

    这段代码会将名为"input.jpg"的图片转换为100x100像素的PNG格式缩略图,并保存为"output.png"。 三、高级功能探索 thumbnailator库提供了许多高级功能,例如: 1. **裁剪**:可以指定裁剪区域,如: ```java ...

    thumbnailatorTest.rar

    thumbnailator是一个功能丰富的Java库,它提供了一种简单、高效的方式来创建缩略图和其他图像处理操作。 首先,让我们深入了解thumbnailator库。thumbnailator由Cenote GmbH开发,它支持多种图像格式,如JPEG、PNG...

    压缩所需要用到的jar

    在这个例子中,`Thumbnails.of()`方法用于创建一个`Builder`对象,接着`.size(128, 128)`定义了缩略图的尺寸,最后`.toFile("thumbnail.jpg")`将生成的缩略图保存到指定的文件。 `thumbnailator`库不仅支持常见的...

    Thumbnailator图片压缩Demo以及jar包

    Thumbnailator是一款强大的Java库,专用于处理图像缩略图的创建和调整。它提供了一种简单易用的方式来生成和操作图像的缩略图,包括等比例缩放、裁剪、旋转等多种功能。在这个"Thumbnailator图片压缩Demo以及jar包...

    GraphicsMagick

    例如,"裁剪"功能允许用户从原始图像中提取指定区域,这对于制作网页缩略图或者提取图像的关键部分非常有用。裁剪可以通过设置坐标和尺寸来精确操作,也可以通过百分比或比例来相对调整。此外,"合成"功能则可以将多...

    simpleimage-1.2.3.jar

    - **电商场景**:在商品详情页中,可以通过SimpleImage快速生成各种尺寸的缩略图,以适应不同设备的展示需求。 - **社交媒体**:在上传用户头像时,可以使用SimpleImage进行尺寸限制和水印添加,保护用户隐私。 -...

    thumbnailator-0.4.8

    * .outputFormat(String png,jpg...修改后缀) * .toFile(String 新图片路径) * .sourceRegion(Positions.BOTTOM_RIGHT,int 宽度,int 高度) Positions.BOTTOM_RIGHT 位置 * .watermark(位置 Positions.TOP_RIGHT,...

Global site tag (gtag.js) - Google Analytics