本文目录一览:
- 1、Java中怎么读取缩略图?像Window中一样,要高效,防止内存溢出! 如何分页显示!
- 2、有人知道java生成缩略图的方法吗 thumbnailator有问题
- 3、java根据url获取网页缩略图
- 4、java JFileChooser选择图片时,如何可以看到图片缩略图,从而进行选择?
Java中怎么读取缩略图?像Window中一样,要高效,防止内存溢出! 如何分页显示!
java内存溢出
核心提示:原因有很多种,比如: 1.数据量过于庞大;死循环 ;静态变量和静态方法过多;递归;无法确定是否被引用的对象; 2.虚拟机不回收内存(内存泄漏); 说白了就是程序运行要用到的内存大于虚拟机能提供的最大内存就发生内存溢出了。 内存溢出的问题要看业务和系
原因有很多种,比如:
1.数据量过于庞大;死循环 ;静态变量和静态方法过多;递归;无法确定是否被引用的对象;
2.虚拟机不回收内存(内存泄漏);
说白了就是程序运行要用到的内存大于虚拟机能提供的最大内存就发生内存溢出了。 内存溢出的问题要看业务和系统大小而定,对于某些系统可能内存溢出不常见,但某些系统还是很常见的解决的方法,
一个是优化程序代码,如果业务庞大,逻辑复杂,尽量减少全局变量的引用,让程序使用完变量的时候释放该引用能够让垃圾回收器回收,释放资源。
二就是物理解决,增大物理内存,然后通过:-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m的修改
有人知道java生成缩略图的方法吗 thumbnailator有问题
自己写了一个,看看能不能有
/**
* 本类实现一个对JPG/JPEG图像文件进行缩放处理的方法:即给定一个JPG文件,可以生成一个该JPG文件的缩影图像文件(JPG格式)br/
* 提供三种生成缩影图像的方法:br/
* 1.设置缩影文件的宽度, 根据设置的宽度和源图像文件的大小来确定新缩影文件的长度来生成缩影图像br/
* 2.设置缩影文件的长度, 根据设置的长度和源图像文件的大小来确定新缩影文件的宽度来生成缩影图像br/
* 3.设置缩影文件相对于源图像文件的比例大小, 根据源图像文件的大小及设置的比例来确定新缩影文件的大小来生成缩影图像br/
* 新生成的缩影图像可以比原图像大, 这时即是放大源图像br/
*
* @author 不落的太阳(Sean Yang)
* @version 1.0
* @since JDK 1.8
*
*/
public class ImageScalingTool {
// 对象是否己经初始化
private boolean isInitFlag = false;
// 定义生目标图片的宽度和高度, 给其一个就可以了
private int targetPicWidth = 0;
private int targetPicHeight = 0;
// 定义目标图片的相比原图片的比例
private double picScale = 0;
/**
* 构造函数
*/
public ImageScalingTool() {
isInitFlag = false;
}
/**
* 重置JPG图片缩放器
*/
public void resetImageScaling() {
picScale = 0;
targetPicWidth = 0;
targetPicHeight = 0;
isInitFlag = false;
}
/**
* 设置目标图片相对于源图片的缩放比例
*
* @param scale
* @throws JPEGException
*/
public void setPicScale(double scale) throws Exception {
if (scale = 0) {
throw new RuntimeException(" 缩放比例不能为0和负数! ");
}
resetImageScaling();
picScale = scale;
isInitFlag = true;
}
/**
* 设置目标图片的宽度
*
* @param width
* @throws JPEGException
*/
public void setSmallWidth(int width) throws Exception {
if (width = 0) {
throw new RuntimeException(" 缩影图片的宽度不能为 0 和负数! ");
}
resetImageScaling();
targetPicWidth = width;
isInitFlag = true;
}
/**
* 设置目标图片的高度
*
* @param height
* @throws JPEGException
*/
public void setSmallHeight(int height) throws Exception {
if (height = 0) {
throw new RuntimeException(" 缩影图片的高度不能为 0 和负数! ");
}
resetImageScaling();
targetPicHeight = height;
isInitFlag = true;
}
/**
* 开始缩放图片
*
* @param srcPicFileName
* 源图片的文件名
* @param targetPicFileName
* 生成目标图片的文件名
* @throws JPEGException
*/
public void transform(String srcPicFileName, String targetPicFileName) throws Exception {
if (!isInitFlag) {
throw new RuntimeException(" 对象参数没有初始化! ");
}
if (srcPicFileName == null || targetPicFileName == null) {
throw new RuntimeException(" 包含文件名的路径为空! ");
}
if ((!srcPicFileName.toLowerCase().endsWith("jpg")) (!srcPicFileName.toLowerCase().endsWith("jpeg"))) {
throw new RuntimeException(" 只能处理 JPG/JPEG 文件! ");
}
if ((!targetPicFileName.toLowerCase().endsWith("jpg")) !targetPicFileName.toLowerCase().endsWith("jpeg")) {
throw new RuntimeException(" 只能处理 JPG/JPEG 文件! ");
}
// 新建源图片和生成图片的文件对象
File fin = new File(srcPicFileName);
File fout = new File(targetPicFileName);
// 通过缓冲读入源图片文件
BufferedImage sourceImage = null;
try {
// 读取文件生成BufferedImage
sourceImage = ImageIO.read(fin);
} catch (IOException ex) {
throw new RuntimeException(" 读取源图像文件出错! ");
}
// 源图片的宽度和高度
int sourceWidth = sourceImage.getWidth();
int sourceHeight = sourceImage.getHeight();
// 设置目标图片的实际宽度和高度
int targetWidth = 0;
int targetHeight = 0;
if (targetPicWidth != 0) {
// 根据设定的宽度求出长度
targetWidth = targetPicWidth;
targetHeight = (targetWidth * sourceHeight) / sourceWidth;
} else if (targetPicHeight != 0) {
// 根据设定的长度求出宽度
targetHeight = targetPicHeight;
targetWidth = (targetHeight * sourceWidth) / sourceHeight;
} else if (picScale != 0) {
// 根据设置的缩放比例设置图像的长和宽
targetWidth = (int) (sourceWidth * picScale);
targetHeight = (int) (sourceHeight * picScale);
} else {
throw new RuntimeException(" 对象参数初始化不正确! ");
}
System.out.println(" 源图片的分辨率: " + sourceWidth + "×" + sourceHeight);
System.out.println(" 目标图片的分辨率: " + targetWidth + "×" + targetHeight);
// 目标图像的缓冲对象
BufferedImage targetImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_3BYTE_BGR);
// 求得目标图片与源图片宽度, 高度的比例.
double scaleWidth = (double) targetWidth / sourceWidth;
double scaleHeight = (double) targetHeight / sourceHeight;
// 构造图像变换对象
AffineTransform transform = new AffineTransform();
// 设置图像转换的比例
transform.setToScale(scaleWidth, scaleHeight);
// 构造图像转换操作对象
AffineTransformOp ato = new AffineTransformOp(transform, null);
// 实现转换, 将bSrc转换成bTarget
ato.filter(sourceImage, targetImage);
// 输出目标图片
try {
// 将目标图片的BufferedImage写到文件中去, jpeg为图片的格式
ImageIO.write(targetImage, "jpeg", fout);
} catch (IOException ex1) {
throw new Exception(" 写入缩略图像文件出错! ");
}
}
}
java根据url获取网页缩略图
代码如下:
public static Bitmap
loadImageFromUrl(String url, int sc) {
URL m;
InputStream
i = null;
BufferedInputStream bis = null;
ByteArrayOutputStream out = null;
byte isBuffer[] = new
byte[1024];
if (url == null)
return null;
try {
m = new URL(url);
i = (InputStream)
m.getContent();
bis = new BufferedInputStream(i, 1024 * 4);
out =
new ByteArrayOutputStream();
int len = 0;
while
((len = bis.read(isBuffer)) != -1) {
out.write(isBuffer, 0,
len);
}
out.close();
bis.close();
} catch (MalformedURLException e1) {
e1.printStackTrace();
return null;
} catch
(IOException e) {
e.printStackTrace();
}
if
(out == null)
return null;
byte[] data =
out.toByteArray();
BitmapFactory.Options options = new
BitmapFactory.Options();
options.inJustDecodeBounds =
true;
BitmapFactory.decodeByteArray(data, 0, data.length,
options);
options.inJustDecodeBounds = false;
int be =
(int) (options.outHeight / (float) sc);
if (be = 0)
{
be = 1;
} else if (be 3) {
be =
3;
}
options.inSampleSize = be;
Bitmap bmp =
null;
try {
bmp = BitmapFactory.decodeByteArray(data,
0, data.length, options); // 返回缩略图
} catch (OutOfMemoryError e)
{
// TODO: handle exception
System.gc();
bmp = null;
}
return
bmp;
}
java JFileChooser选择图片时,如何可以看到图片缩略图,从而进行选择?
菜单栏(后退那一排)最后面有个查看,那里面点击缩略图,即可看到从而选择幻灯片,缩略图等