`
suiu
  • 浏览: 33304 次
  • 性别: Icon_minigender_1
  • 来自: 山东
社区版块
存档分类
最新评论

JAVA制作缩略图

阅读更多
package graphicsTest;

import java.awt.Image;
import java.awt.image.BufferedImage;
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 GraphicsTest1 {

	// 图片宽和高的最大尺寸
	public static final int IMAGEMAXBIG = 2000;
	// 图片宽和高的最小尺寸
	public static final int IMAGEMINBIG = 10;
	// 按原图大小生成新图
	public static final int CREATENEWIMAGETYPE_0 = 0;
	// 按指定的大小生成新图
	public static final int CREATENEWIMAGETYPE_1 = 1;
	// 按原图宽高比例生成新图-按指定的宽度
	public static final int CREATENEWIMAGETYPE_2 = 2;
	// 按原图宽高比例生成新图-按指定的高度
	public static final int CREATENEWIMAGETYPE_3 = 3;
	// 按原图宽高比例生成新图-按指定的宽和高中较大的尺寸
	public static final int CREATENEWIMAGETYPE_4 = 4;
	// 按原图宽高比例生成新图-按指定的宽和高中较小的尺寸
	public static final int CREATENEWIMAGETYPE_5 = 5;

	/**
	 * 
	 * @param _file
	 *            原图片
	 * @param createType
	 *            处理类型
	 * @param newW
	 *            新宽度
	 * @param newH
	 *            新高度
	 * @return
	 * @throws Exception
	 */
	public static String createNewImage(File _file, int createType, int newW,
			int newH) throws Exception {
		if (_file == null)
			return null;
		String fileName = _file.getPath();
		if (fileName == null || "".equals(fileName)
				|| fileName.lastIndexOf(".") == -1)
			return null;
		String newFileName = "_NEW";
		/*
		 * else newFileName = "_" + newFileName;
		 */

		String outFileName = fileName.substring(0, fileName.lastIndexOf("."))
				+ newFileName
				+ fileName.substring(fileName.lastIndexOf("."), fileName
						.length());
		String fileExtName = fileName.substring(
				(fileName.lastIndexOf(".") + 1), fileName.length());
		if (newW < IMAGEMINBIG)
			newW = IMAGEMINBIG;
		else if (newW > IMAGEMAXBIG)
			newW = IMAGEMAXBIG;

		if (newH < IMAGEMINBIG)
			newH = IMAGEMINBIG;
		else if (newH > IMAGEMAXBIG)
			newH = IMAGEMAXBIG;

		// 得到原图信息
		if (!_file.exists() || !_file.isAbsolute() || !_file.isFile()
				|| !checkImageFile(fileExtName))
			return null;
		if ((new File(outFileName)).exists()) {
			System.out.println("file [" + outFileName + "] already exists");
			throw new Exception();
		}
		Image src = ImageIO.read(_file);
		int w = src.getWidth(null);
		int h = src.getHeight(null);

		// 确定目标图片的大小
		int nw = w;
		int nh = h;
		if (createType == CREATENEWIMAGETYPE_0)
			;
		else if (createType == CREATENEWIMAGETYPE_1) {
			nw = newW;
			nh = newH;
		} else if (createType == CREATENEWIMAGETYPE_2) {
			nw = newW;
			nh = (int) ((double) h / (double) w * nw);
		} else if (createType == CREATENEWIMAGETYPE_3) {
			nh = newH;
			nw = (int) ((double) w / (double) h * nh);
		} else if (createType == CREATENEWIMAGETYPE_4) {
			if ((double) w / (double) h >= (double) newW / (double) newH) {
				nh = newH;
				nw = (int) ((double) w / (double) h * nh);
			} else {
				nw = newW;
				nh = (int) ((double) h / (double) w * nw);
			}
		} else if (createType == CREATENEWIMAGETYPE_5) {
			if ((double) w / (double) h <= (double) newW / (double) newH) {
				nh = newH;
				nw = (int) ((double) w / (double) h * nh);
			} else {
				nw = newW;
				nh = (int) ((double) h / (double) w * nw);
			}
		}

		// 构造目标图片
		BufferedImage tag = new BufferedImage(nw, nh,
				BufferedImage.TYPE_INT_RGB);

		// 得到目标图片输出流
		FileOutputStream out = new FileOutputStream(outFileName);

		// 根据需求画出目标图片 方式1
		tag.getGraphics().drawImage(src, 0, 0, nw, nh, null);

		// 将画好的目标图输出到输出流 方式1
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
		encoder.encode(tag);
		out.close();
		return outFileName;
	}

	public static boolean checkImageFile(String extName) {

		if ("jpg".equalsIgnoreCase(extName))
			return true;
		if ("gif".equalsIgnoreCase(extName))
			return true;
		if ("bmp".equalsIgnoreCase(extName))
			return true;
		if ("jpeg".equalsIgnoreCase(extName))
			return true;
		if ("png".equalsIgnoreCase(extName))
			return true;
		return false;
	}

}

 

分享到:
评论

相关推荐

    Java 制作缩略图

    NULL 博文链接:https://wenkaixuan.iteye.com/blog/785823

    Thumbnailator - Java 的缩略图生成库.zip

    用 Java 制作高质量的缩略图可能是一项相当困难的任务。学习如何使用图像 I/O API、Java 2D API、图像处理、图像缩放技术......但不要害怕!Thumbnailator将为您处理所有这些事情!Thumbnailator 是一个单一的 JAR ...

    JAVA ImageJ 支持图片格式转换,图片放大缩小等,功能非常强大,缩略图高清晰,有实例代码

    提供的`Thumbnail_Maker.java`是一个具体的代码示例,展示了如何使用ImageJ进行缩略图的制作。通过分析和运行这个示例,开发者可以快速上手ImageJ的使用。 6. **开发应用**: 利用ImageJ,开发者不仅可以进行基本...

    java结合gdal对大图片进行重采样

    在这种情况下,我们可以借助外部库,如GDAL(Geospatial Data Abstraction Library),来扩展Java的能力,实现大图片的重采样和压缩,从而制作缩略图。以下是对这个主题的详细阐述: **GDAL介绍** GDAL是一个开源的...

    thumbnailator:Thumbnailator-Java的缩略图生成库

    用Java制作高质量的缩略图可能是一项相当困难的任务。 学习如何使用图像I / O API,Java 2D API,图像处理,图像缩放技术,但不要担心! Thumbnailator将为您处理所有这些事情! Thumbnailator是单个JAR文件,不...

    生成缩略图并加水印文字源码

    生成缩略图的过程通常涉及图像处理库,如PHP中的GD库或Imagick,Python中的PIL(Python Imaging Library)或OpenCV,Java中的Java Advanced Imaging (JAI) 或 ImageIO等。这些库提供了函数来读取图像、调整尺寸并...

    sunflower缩略图生成工具

    高质量纯java缩略图生成工具,方便简单易用,sunflower制作

    图片剪切、生成缩略图、图片合成、图片加密校验

    本项目涉及的核心知识点包括图片剪切、生成缩略图、图片合成以及图片的MD5加密和校验,这些都是图像处理的重要组成部分。下面将详细讲解这些技术。 1. **图片剪切**: 图片剪切是指从原始图片中选取特定区域,将...

    用java做的图片浏览器

    7. **多线程**:如果图片浏览器需要支持预览或缩略图功能,可能需要在后台线程中加载大图片,以避免阻塞用户界面。Java的Thread类或ExecutorService接口可以用来实现这一目标。 8. **异常处理**:在处理文件和图像...

    上传缩略图与地区三级联动

    缩略图的制作可以通过以下两种技术: 1. 客户端处理:利用JavaScript库如jQuery或纯HTML5的File API,可以在用户选择图片后即时进行缩放和裁剪。这种方法可以减轻服务器负担,但可能受限于浏览器兼容性,且处理大...

    Java实现的不同图片居中剪裁生成同一尺寸缩略图功能示例

    在Java编程中,生成同一尺寸的缩略图是常见的需求,尤其在网页设计或移动应用开发中。这个过程通常涉及到图片的读取、调整大小、剪裁和保存等步骤。以下是一个具体的Java实现,用于将不同尺寸的图片居中剪裁成指定...

    java实现电子阅读器(源代码)

    实现这一功能需要生成每个页面的缩略图,可能需要用到 ImageIO 类进行图片读取和处理,以及 Thumbnailator 这样的第三方库来创建缩略图。缩位图数据同样需要存储和加载,以便于用户浏览。 综上所述,这个 Java 实现...

    用JAVA实现的幻灯片小程序

    同时,通过阅读和理解"slider.java"的代码,开发者可以进一步定制功能,比如添加过渡效果、增加图片缩略图预览或者实现更复杂的交互操作。对于初学者而言,这是一个很好的学习项目,可以帮助他们提升Java编程和图形...

    用JAI扩展Java的图像处理能力 - 中文JAVA技术网

    4. **网络图像服务**:在网络应用中,JAI可以用于动态生成缩略图、调整图像质量等。 五、JAI与其他图像库的比较 相比于Java标准库中的`java.awt.image`包,JAI提供了更强大的功能和更好的性能。与第三方库如OpenCV...

    从Java走向Java+EE+.rar

    6.3 实例——利用JSP制作图片缩略图 87 6.4 小结 90 第7章 JSTL——JSP标准标签库 91 7.1 JSTL基础 91 7.1.1 JSTL的核心标签库 92 7.1.2 JSTL中使用表达式语言 93 7.2 实例——利用JSTL标签生成数字序列...

    制作图片浏览器

    这通常包括图片预览区域、导航按钮(上一张、下一张)、缩略图视图、文件选择器等。可以使用各种GUI框架来实现,如Qt、wxPython、JavaFX或Swing。 3. **文件I/O操作**:图片浏览器需要能够遍历文件系统,找到并加载...

    简单易懂的图片水印缩略

    例如,在一个图片分享网站上,用户上传的原图可以加上水印,然后生成缩略图显示在列表中,既保护了版权,又方便用户浏览。在这个压缩包中的"img"文件,很可能包含了示例图片或者处理后的效果,可以作为学习和实践这...

    java Img转视频的Jim2mov以及JMF、thumbnailator-0.4.8

    "thumbnailator-0.4.8"则是一个Java库,专门用于创建图像缩略图。它提供了简单易用的API,可以快速地从图像文件生成缩略图,并且支持多种调整选项,如尺寸、质量、裁剪等。这个库在处理大量图像时非常有用,特别是在...

    java开源论坛jeebbs v5.1 源码包

    使用道具时可以通过支付宝和微信支付购买道具,我的消费记录,我的订单列表,主题收益统计,提现申请,提现申请列表 9、帖子图片上传后自动生成缩略图功能,点击缩略图查看大图 10、新增微信用户快速登录论坛功能...

    JMagick图片处理

    这个技术涵盖了多个关键知识点,包括创建缩略图、添加水印、切图以及压缩图片,这些都是数字图像处理中的基本操作。 首先,**缩略图**的生成是通过调整原图像尺寸,生成较小的版本,常用于网站预览或者节省存储空间...

Global site tag (gtag.js) - Google Analytics