java缩略图,生成缩略图

本文目录一览:

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选择图片时,如何可以看到图片缩略图,从而进行选择?

菜单栏(后退那一排)最后面有个查看,那里面点击缩略图,即可看到从而选择幻灯片,缩略图等

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/181463.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-23 06:40
下一篇 2024-11-23 06:40

相关推荐

  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29
  • Java 8 Group By 会影响排序吗?

    是的,Java 8中的Group By会对排序产生影响。本文将从多个方面探讨Group By对排序的影响。 一、Group By的概述 Group By是SQL中的一种常见操作,它…

    编程 2025-04-29

发表回复

登录后才能评论