在任何一个综合性网站或wap网站,我们往往需要上传一些图片资料。但随着高分辨率DC的普及,上传的图片容量会很大,比如300万象素DC出来的文件基本不下600K。为了管理方便,大家可能不愿意每次都用ACDsee修改它,而直接上传到服务器。但是这种做法在客户端看来就没有那么轻松了,对于拨号上网的用户简直是一场恶梦,虽然你可以在图片区域设置wide和high!
问题的解决之道来了!我们可以在类中处理一张大图,并缩小它。
前提是需要JDK1.4以上,这样才能进行处理。按以下方法做:
package image;
import java.io.File;
import java.io.FileOutputStream;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class JpgTest {
public static void main(String[] args){
JpgTest jt = new JpgTest();
jt.doImage();
}
public void doImage() {
try{
File _file = new File(
"E:/project/test/imagefiles/mid_20061028011529260.jpg"); //读入文件
Image src = javax.imageio.ImageIO.read(_file); //构造Image对象
int wideth = src.getWidth(null); //得到源图宽
int height = src.getHeight(null); //得到源图长
BufferedImage tag = new BufferedImage(wideth *128/ 240, height *128/ 240,
BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src, 0, 0, wideth *128/ 240, height *128/ 240, null); //绘制缩小后的图
FileOutputStream out = new FileOutputStream(
"E:/project/test/imagefiles/newfile.jpg"); //输出到文件流
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag); //近JPEG编码
//System.out.print(width+"*"+height);
out.close();
}catch( Exception e){
e.printStackTrace();
}
}
}
过程很简单,从本地磁盘读取文件Order005-0001.jpg(2032*1524),变成Image对象src,接着构造目标文件tag,设置tag的长宽为源图的一半,对tag进行编码,输出到文件流out,最后关闭文件流。
还有一些问题需要说明:
第一,目前只能支持JPG(JPEG)、GIF、PNG三种格式。
第二,对于源图的容量有限制,最好不要超过1M,否则会抛内存不足的错误,不过我试验过1.8M的源图,可以成功,但是也很容易抛内存不足。
引用一位前辈的话:图象运算本身是密集型运算,需要大量的内存存放象素值。我用VC试了一下,4M的图象也有问题,而且越是压缩比大的图片在内存中还原成BITMAP时需要的内存越大。解决的方法,可以重写编码类,先开一定的内存,然后一段一段编码写到临时文件中,输出的时候再一段一段读出来。或利用nio的内存映象来操作。JavaMail由于采用了Builder模式,先生成一个邮件的每一个部分,然后合并成一个完整的邮件对象,这样每个构件都要先生成到内存中,你如果发送一个上百兆的附件,那么在构造Part时肯定内存溢出,所以我就改写了BodyPart的构造,让他和一个临时文件关联,然后用临时文件保存Part而不是构造在内存中,这样任义大小的附件(硬盘能放得下为限)都可以发送了。
最后,如果大家对图像处理有更高的要求,不妨关注一下开源项目。比如JMagick,可以使用JMagick来实现图片的复制、信息获取、斜角、特效、组合、改变大小、加边框、旋转、切片、改变格式、去色等等功能。
分享到:
相关推荐
在Java编程环境中,获取视频缩略图是一项常见的需求,尤其在多媒体应用或者视频分享平台中。这个过程涉及到多媒体处理和图像操作的知识。本文将详细解释如何在Java中实现这一功能,以及相关的技术点。 首先,Java...
在Java编程中,生成缩略图是一项常见的任务,特别是在处理图像处理、网页设计或移动应用开发时。这个任务涉及到读取原始图像,调整其尺寸,然后保存为较小的版本,即缩略图。在这个过程中,我们可以使用Java的内置库...
平时工作中用到的一些技术点,拿出来和大家共享一下。 有些功能比较粗糙,如果大家有更加完善的示例或建议,欢迎交流。...1、jpg图片缩略图:ImageUtil 2、poi创建excel:CDSHdlReport 3、计算表达式求值:Cal
在 Java 中生成图片缩略图是一项常见的需求,这通常涉及到图像处理技术。以下是一个 Java 类 `GetPicture` 的示例,它包含了获取网络图片、截取屏幕以及创建图片缩略图的功能。我们将详细解释其中的关键知识点。 1....
生成缩略图通常可以借助于图像处理库,如Java的`javax.imageio.ImageIO`或第三方库如Apache Commons Imaging。以下是一个简单的示例: ```java try { BufferedImage originalImage = ImageIO.read(file....
在这个"java生成缩略图.zip"压缩包中,我们可能找到了一份Java源代码,用于演示如何在Java环境下创建图像的缩略图。 首先,我们要了解在Java中生成缩略图的关键概念和技术。Java的`java.awt.image`和`javax.imageio...
在JSP(Java Server Pages)中生成图片缩略图是一个常见的需求,特别是在处理大量图片的网站上,为了提高页面加载速度和用户体验,通常会将原始图片转换为较小的缩略图进行展示。本文将深入解析如何在JSP中实现图片...
假设我们使用Java自带的ImageIO,可以编写一个函数来生成缩略图: ```java private BufferedImage generateThumbnail(BufferedImage sourceImage, int maxWidth, int maxHeight) { double scaleWidth = (double) ...
Java 缩略图生成库,如“thumbnailator-0.4.4.jar”,是一个非常实用的工具,尤其对于那些在处理图像文件时需要快速创建预览或者缩略图的开发者而言。这个库提供了简单易用的API,可以方便地集成到Java项目中,大大...
5. **生成缩略图**:利用Java API或其他第三方库(如Thumbnails)来生成图片的缩略版本。 6. **将图片数据存储到数据库**:将处理后的图片数据(包括原图和缩略图)存储到数据库中。 #### 二、代码详解与知识点分析...
在这个场景下,我们关注的是如何在Java中生成缩略图,同时确保缩略图与原图的根目录不同,但其他路径保持一致。我们将探讨`simpleimage`库,它是一个用于图像处理的简洁工具,以及如何使用它来实现等比例缩放,以...
本文将详细介绍一个名为Thumbnailator的Java库,它是用于生成图片缩略图的强大工具,并讲解如何在项目中使用。 Thumbnailator是一个开源的Java库,专门设计用来创建、编辑和转换图像。它具有高度的灵活性和易用性...
Java作为一门广泛应用的编程语言,提供了多种方式来处理图像,包括生成等比例缩略图。本篇文章将深入探讨如何使用Java实现图片的等比例缩略图,并提供相关代码示例。 首先,我们需要了解等比例缩略图的概念。等比例...
4. **生成缩略图**:使用图像处理库(如`Java Advanced Imaging (JAI)`或`ImageIO`)来创建缩略图。首先,读取原始图像,然后调整其尺寸,最后保存为新的缩略图文件。 ```java BufferedImage originalImage = ...
通过这些库,JAVA程序员可以直接调用FFmpeg的命令行功能,如`ffmpeg -i video.mp4 -vframes 1 thumbnail.jpg`,轻松实现视频截取缩略图。 3. **JCodec**:这是一个轻量级的JAVA音视频编解码库,支持H.264和MPEG-4等...
在Java编程中,处理图像是一项常见的任务,包括裁剪图片和生成缩略图。下面将详细解释如何在Java中实现这两个功能。 首先,裁剪图片通常涉及到从原始图像中选择一个矩形区域并保存为新的图像。在Java中,我们可以...
在Action类中,我们需要实现处理上传文件的方法,如`execute()`,在这个方法里,可以使用Java AWT或者Apache Commons Imaging库生成缩略图。这里以Java AWT为例: ```java public String execute() { try { ...