六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 69|回复: 0

图片处理

[复制链接]

升级  20%

2

主题

2

主题

2

主题

童生

Rank: 1

积分
10
 楼主| 发表于 2013-1-27 05:19:48 | 显示全部楼层 |阅读模式
改变大小
        File picFile = new File("C:/pic/yui2.jpg");        FileOutputStream fos = new FileOutputStream(picFile);        BufferedOutputStream bos = new BufferedOutputStream(fos);        File picFileInput = new File("C:/pic/yui.jpg");        FileInputStream fis = new FileInputStream(picFileInput);        BufferedInputStream bis = new BufferedInputStream(fis);        BufferedImage bi = ImageIO.read(bis);        BufferedImage bo = new BufferedImage(512, 384,                BufferedImage.TYPE_INT_RGB);        Image image = bi.getScaledInstance(512, 384, Image.SCALE_REPLICATE);        bo.getGraphics().drawImage(image, 0, 0, null);        ImageIO.write(bo, "jpg", bos);        bos.close();        fos.close();

切割
/** *//**     * 图像切割     * @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();        }    }
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表