在任何一个综合性网站,我们往往需要上传一些图片资料。但随着高分辨率DC的普及,上传的图片容量会很大,比如300万象素DC出来的文件基本不下600K。为了管理方便,大家可能不愿意每次都用ACDsee修改它,而直接上传到服务器。但是这种做法在客户端看来就没有那么轻松了,对于拨号上网的用户简直是一场恶梦,虽然你可以在图片区域设置wide和high!
问题的解决之道来了!我们可以在类中处理一张大图,并缩小它。
前提是需要JDK1.4,这样才能进行处理。按以下方法做:
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 void JpgTset() throws Exception{
File _file = new File("/Order005-0001.jpg"); //读入文件
Image src = javax.imageio.ImageIO.read(_file); //构造Image对象
int wideth=src.getWidth(null); //得到源图宽
int height=src.getHeight(null); //得到源图长
BufferedImage tag = new BufferedImage(wideth/2,height/2,BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src,0,0,wideth/2,height/2,null); //绘制缩小后的图
FileOutputStream out=new FileOutputStream("newfile.jpg"); //输出到文件流
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag); //近JPEG编码
//System.out.print(width+"*"+height);
out.close();
}
}
过程很简单,从本地磁盘读取文件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来实现图片的复制、信息获取、斜角、特效、组合、改变大小、加边框、旋转、切片、改变格式、去色等等功能。
分享到:
相关推荐
这个"php生成图片缩略图代码类.zip"压缩包提供了一个专门用于创建图片缩略图的PHP类,简化了这一过程。下面将详细介绍这个类的工作原理以及如何使用。 首先,我们需要理解图片缩略图生成的基本概念。缩略图是原图的...
在本文中,我们将深入探讨如何使用jpeglib库在Linux环境下提取JPEG图片的缩略图,并进行网络传输。jpeglib库是JPEG(Joint Photographic Experts Group)标准的一个开源实现,它提供了一系列API,允许开发者对JPEG...
【Java 缩略图代码详解】 在 Java 中生成图片缩略图是一项常见的需求,这通常涉及到图像处理技术。以下是一个 Java 类 `GetPicture` 的示例,它包含了获取网络图片、截取屏幕以及创建图片缩略图的功能。我们将详细...
这个压缩包“asp 生成缩略图代码.rar”可能包含了实现这一功能的源代码。 生成缩略图的原理主要是通过图像处理技术,将原图按比例缩小,保持原有的宽高比,同时还可以进行裁剪以适应特定尺寸。在ASP中,我们通常会...
跟踪分析Android缩略图代码,我们可以使用Android的Logcat工具来记录和查看日志,通过添加日志语句在关键位置,如生成、存储和检索缩略图的过程中。此外,Android Studio的调试器也是很好的辅助工具,可以设置断点,...
本文将围绕“C#水印以及缩略图代码”这一主题,详细介绍其实现原理和技术细节。 #### 二、关键技术介绍 ##### 2.1 CodeCarvings.Piczard 包简介 CodeCarvings.Piczard 是一个强大的图片处理库,能够帮助开发者...
淘宝专业版自定义全屏带缩略图轮播代码是一种常见的网页设计技术,主要用于电商平台的商品展示,提升用户体验。这种轮播通常包含一个全屏主图和下方的缩略图导航栏,用户可以通过点击缩略图切换主图,实现商品图片的...
本文将详细讲解如何使用C#语言来实现这个功能,以创建一个能够从URL获取并生成网站缩略图的代码库。 首先,我们需要理解缩略图生成的基本流程。大致分为以下几个步骤: 1. **网络请求**:获取目标网站的HTML内容。...
在C#编程中,处理图像任务,如添加水印、创建缩略图和应用标识,是常见的需求。这些功能在Web开发中尤为常见,尤其是在构建ASP.NET应用程序时。以下是一些关于如何使用C#实现这些功能的关键知识点: 1. **图片处理...
在提供的代码示例中,定义了一个名为`MakeThumbnail`的方法,该方法接收五个参数:原始图片路径(`originalImagePath`)、缩略图保存路径(`thumbnailPath`)、目标宽度(`width`)、目标高度(`height`)以及缩放模式(`mode...
"jQuery带缩略图的焦点图代码.zip"是一个包含实现带缩略图焦点图功能的资源包,特别适用于网页设计中展示图片相册或产品展示区域。以下是对这个代码实现的详细解释: 1. **焦点图**:焦点图是一种网页设计中的交互...
在图片预览和缩略图生成中,我们可以利用Canvas的drawImage方法将图片加载到Canvas上,然后通过调整Canvas的宽度和高度来生成缩略图。 3. **Data URL**:Data URL是一种内联资源表示方式,可以直接在页面中嵌入图像...
- 代码可能会先加载原始图像,然后使用`resize()`函数并指定合适的尺寸和插值方法来生成缩略图。 - 缩放后的图像可能保存为新的文件,或者直接在内存中操作并返回。 - 如果涉及边界处理,代码中可能有对边缘像素的...
6. **使用步骤**:在实际使用这个项目时,你可能需要根据`Program.cs`中的代码逻辑,输入原图路径和目标缩略图的尺寸,然后运行程序,最后在指定位置找到生成的缩略图。 以上就是使用C#制作缩略图的基本流程和关键...
在C++编程中,生成缩略图是一项常见的需求,特别是在图像处理或图形用户界面的应用程序中。缩略图是原始图像的小尺寸版本,用于快速预览,节省资源,提高用户体验。下面将详细介绍两种C++中获取缩略图的方法,并探讨...
标题中的“jQuery带缩略图广告代码”是指利用jQuery库来实现一种具有缩略图功能的广告展示效果。这种效果通常用于网站上,使用户可以通过点击或滑动缩略图来浏览不同广告或产品,提升用户体验。接下来我们将深入探讨...
本示例代码旨在帮助开发者自定义特定文件类型的缩略图生成,使得非标准格式的文件也能在资源管理器中显示相应的预览图。下面我们将深入探讨缩略图生成的关键技术和实现步骤。 1. **缩略图接口与类库**: Windows...
本压缩包提供了一个批量生成缩略图工具的源代码,采用Winform作为开发平台,这对于学习和理解图像处理技术具有很高的参考价值。 首先,我们要了解Winform是什么。Winform是.NET Framework中的一个Windows应用程序...
"图片裁剪自动生成缩略图"这个话题涉及到的是如何使用JavaScript库,特别是JQuery框架,来实现图片的裁剪功能,并自动创建适合展示的缩略图。接下来,我们将详细探讨这一过程中的关键技术点。 首先,JQuery是一个...