`
mooninday
  • 浏览: 2188 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

图片处理

阅读更多
改变大小
        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();
        }
    }

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics