博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA图片处理--缩放,切割,类型转换
阅读量:4640 次
发布时间:2019-06-09

本文共 5252 字,大约阅读时间需要 17 分钟。

import java.io.*;import java.awt.*;import java.awt.image.*;import java.awt.Graphics;import java.awt.color.ColorSpace;import javax.imageio.ImageIO;public class ChangeImageSize{    /** *//**     * 缩放图像     * @param srcImageFile 源图像文件地址     * @param result       缩放后的图像地址     * @param scale        缩放比例     * @param flag         缩放选择:true 放大; false 缩小;     */    public static void scale(String srcImageFile, String result, int scale, boolean flag)    {        try        {            BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件            int width = src.getWidth(); // 得到源图宽            int height = src.getHeight(); // 得到源图长            if (flag)            {                // 放大                width = width * scale;                height = height * scale;            }            else            {                // 缩小                width = width / scale;                height = height / scale;            }            Image image = src.getScaledInstance(width, height, Image.SCALE_DEFAULT);            BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);            Graphics g = tag.getGraphics();            g.drawImage(image, 0, 0, null); // 绘制缩小后的图            g.dispose();            ImageIO.write(tag, "JPEG", new File(result));// 输出到文件流        }        catch (IOException e)        {            e.printStackTrace();        }    }    /** *//**     * 图像切割     * @param srcImageFile 源图像地址     * @param descDir      切片目标文件夹     * @param destWidth    目标切片宽度     * @param destHeight   目标切片高度     */    public static void cut(String srcImageFile, String descDir, int destWidth, int destHeight)    {        try        {            Image img;            ImageFilter cropFilter;            // 读取源图像            BufferedImage bi = ImageIO.read(new File(srcImageFile));            int srcWidth = bi.getHeight(); // 源图宽度            int srcHeight = bi.getWidth(); // 源图高度            if (srcWidth > destWidth && srcHeight > destHeight)            {                Image image = bi.getScaledInstance(srcWidth, srcHeight, Image.SCALE_DEFAULT);                destWidth = 200; // 切片宽度                destHeight = 150; // 切片高度                int cols = 0; // 切片横向数量                int rows = 0; // 切片纵向数量                // 计算切片的横向和纵向数量                if (srcWidth % destWidth == 0)                {                    cols = srcWidth / destWidth;                }                else                {                    cols = (int) Math.floor(srcWidth / destWidth) + 1;                }                if (srcHeight % destHeight == 0)                {                    rows = srcHeight / destHeight;                }                else                {                    rows = (int) Math.floor(srcHeight / destHeight) + 1;                }                // 循环建立切片                // 改进的想法:是否可用多线程加快切割速度                for (int i = 0; i < rows; i++)                {                    for (int j = 0; j < cols; j++)                    {                        // 四个参数分别为图像起点坐标和宽高                        // 即: CropImageFilter(int x,int y,int width,int height)                        cropFilter = new CropImageFilter(j * 200, i * 150, destWidth, destHeight);                        img = Toolkit.getDefaultToolkit(), .createImage(                                        new FilteredImageSource(image.getSource(), cropFilter));                        BufferedImage tag = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);                        Graphics g = tag.getGraphics();                        g.drawImage(img, 0, 0, null); // 绘制缩小后的图                        g.dispose();                        // 输出为文件                        ImageIO.write(tag, "JPEG", new File(descDir + "pre_map_" + i + "_" + j + ".jpg"));                    }                }            }        }        catch (Exception e)        {            e.printStackTrace();        }    }    /** *//**     * 图像类型转换 GIF->JPG GIF->PNG PNG->JPG PNG->GIF(X)     */    public static void convert(String source, String result)    {        try        {            File f = new File(source);            f.canRead();            f.canWrite();            BufferedImage src = ImageIO.read(f);            ImageIO.write(src, "JPG", new File(result));        }        catch (Exception e)        {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    /** *//**     * 彩色转为黑白     * @param source     * @param result     */    public static void gray(String source, String result)    {        try        {            BufferedImage src = ImageIO.read(new File(source));            ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);            ColorConvertOp op = new ColorConvertOp(cs, null);            src = op.filter(src, null);            ImageIO.write(src, "JPEG", new File(result));        }        catch (IOException e)        {            e.printStackTrace();        }    }    /** *//**     * @param args     */    public static void main(String[] args)    {        scale("D:\100CASIO\CIMG0001.JPG","C:\Documents and Settings\ibm\桌面\image.jpg",10,false);    }}

 文章转自:http://www.cnblogs.com/chinaqiao/archive/2009/06/04/1496170.html

转载于:https://www.cnblogs.com/dreammyle/p/3992983.html

你可能感兴趣的文章
LA3029最大子矩阵
查看>>
万网域名MX解析设置方案[net.cn, ubuntu]
查看>>
403. Frog Jump
查看>>
C++学习之二分查找续
查看>>
Vue创建SPA那些事
查看>>
python基础学习1-列表推导式和字典推导式
查看>>
mfc Radio Buttons
查看>>
[JavaScript]父子窗口间参数传递
查看>>
Test Controller Tool
查看>>
86. Partition List
查看>>
[LintCode] 378 Convert Binary Search Tree to Doubly Linked List 解题报告
查看>>
JAVA-初步认识-常用对象API(集合框架-泛型-泛型限定-上限的体现)
查看>>
查找一个字段所处的数据库及表
查看>>
第一周学习进度+四则运算1.0版
查看>>
baba 运动网
查看>>
for循环小练习
查看>>
JAE京东云引擎Git上传管理代码教程和京东云数据库导入导出管理
查看>>
教你如何迅速秒杀掉:99%的海量数据处理面试题
查看>>
高血压吃什么好?
查看>>
Java for LeetCode 047 Permutations II
查看>>