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;
}
}
分享到:
相关推荐
NULL 博文链接:https://wenkaixuan.iteye.com/blog/785823
用 Java 制作高质量的缩略图可能是一项相当困难的任务。学习如何使用图像 I/O API、Java 2D API、图像处理、图像缩放技术......但不要害怕!Thumbnailator将为您处理所有这些事情!Thumbnailator 是一个单一的 JAR ...
提供的`Thumbnail_Maker.java`是一个具体的代码示例,展示了如何使用ImageJ进行缩略图的制作。通过分析和运行这个示例,开发者可以快速上手ImageJ的使用。 6. **开发应用**: 利用ImageJ,开发者不仅可以进行基本...
在这种情况下,我们可以借助外部库,如GDAL(Geospatial Data Abstraction Library),来扩展Java的能力,实现大图片的重采样和压缩,从而制作缩略图。以下是对这个主题的详细阐述: **GDAL介绍** GDAL是一个开源的...
用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等。这些库提供了函数来读取图像、调整尺寸并...
高质量纯java缩略图生成工具,方便简单易用,sunflower制作
本项目涉及的核心知识点包括图片剪切、生成缩略图、图片合成以及图片的MD5加密和校验,这些都是图像处理的重要组成部分。下面将详细讲解这些技术。 1. **图片剪切**: 图片剪切是指从原始图片中选取特定区域,将...
7. **多线程**:如果图片浏览器需要支持预览或缩略图功能,可能需要在后台线程中加载大图片,以避免阻塞用户界面。Java的Thread类或ExecutorService接口可以用来实现这一目标。 8. **异常处理**:在处理文件和图像...
缩略图的制作可以通过以下两种技术: 1. 客户端处理:利用JavaScript库如jQuery或纯HTML5的File API,可以在用户选择图片后即时进行缩放和裁剪。这种方法可以减轻服务器负担,但可能受限于浏览器兼容性,且处理大...
在Java编程中,生成同一尺寸的缩略图是常见的需求,尤其在网页设计或移动应用开发中。这个过程通常涉及到图片的读取、调整大小、剪裁和保存等步骤。以下是一个具体的Java实现,用于将不同尺寸的图片居中剪裁成指定...
实现这一功能需要生成每个页面的缩略图,可能需要用到 ImageIO 类进行图片读取和处理,以及 Thumbnailator 这样的第三方库来创建缩略图。缩位图数据同样需要存储和加载,以便于用户浏览。 综上所述,这个 Java 实现...
同时,通过阅读和理解"slider.java"的代码,开发者可以进一步定制功能,比如添加过渡效果、增加图片缩略图预览或者实现更复杂的交互操作。对于初学者而言,这是一个很好的学习项目,可以帮助他们提升Java编程和图形...
4. **网络图像服务**:在网络应用中,JAI可以用于动态生成缩略图、调整图像质量等。 五、JAI与其他图像库的比较 相比于Java标准库中的`java.awt.image`包,JAI提供了更强大的功能和更好的性能。与第三方库如OpenCV...
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"文件,很可能包含了示例图片或者处理后的效果,可以作为学习和实践这...
"thumbnailator-0.4.8"则是一个Java库,专门用于创建图像缩略图。它提供了简单易用的API,可以快速地从图像文件生成缩略图,并且支持多种调整选项,如尺寸、质量、裁剪等。这个库在处理大量图像时非常有用,特别是在...
使用道具时可以通过支付宝和微信支付购买道具,我的消费记录,我的订单列表,主题收益统计,提现申请,提现申请列表 9、帖子图片上传后自动生成缩略图功能,点击缩略图查看大图 10、新增微信用户快速登录论坛功能...
这个技术涵盖了多个关键知识点,包括创建缩略图、添加水印、切图以及压缩图片,这些都是数字图像处理中的基本操作。 首先,**缩略图**的生成是通过调整原图像尺寸,生成较小的版本,常用于网站预览或者节省存储空间...