java一些图片处理

 /**
     * 图片缩放
     *
     * @param filePath 图片路径
     * @param height 高度
     * @param width 宽度
     * @param bb 比例不对时是否需要补白
     */
    public static BufferedImage resize(String filePath, int height, int width, boolean bb) {
        try {
            double ratio = 0; // 缩放比例
            File localFile = readFile(filePath);
            BufferedImage bi = ImageIO.read(localFile);
            Image itemp = bi.getScaledInstance(width, height, Image.SCALE_SMOOTH);
            // 计算比例
            if ((bi.getHeight() > height) || (bi.getWidth() > width)) {
                if (bi.getHeight() > bi.getWidth()) {
                    ratio = (new Integer(height)).doubleValue() / bi.getHeight();
                } else {
                    ratio = (new Integer(width)).doubleValue() / bi.getWidth();
                }
                AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null);
                itemp = op.filter(bi, null);
            }
            if (bb) {
                BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
                Graphics2D g = image.createGraphics();
                g.setColor(Color.white);
                g.fillRect(0, 0, width, height);
                if (width == itemp.getWidth(null))
                    g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2, itemp.getWidth(null),
                            itemp.getHeight(null), Color.white, null);
                else
                    g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null),
                            itemp.getHeight(null), Color.white, null);
                g.dispose();
                itemp = image;
            }
            return (BufferedImage) itemp;
        } catch (Exception e) {
            Log("缩放图片失败," + ", 弃用 url:" + filePath);
        }
        return null;
    }
/**
* 从图片url到File对象
*/
private static File readFile(String fileUrl) throws Exception {
        if (StringUtils.isEmpty(fileUrl)) {
            return null;
        }

        String filePath;
        String pathName ;
        File dir = new File(LOCAL_PICTURE_DIR + pathName);

        if (!dir.exists()) {
            dir.mkdirs();
        }
        File file = new File(LOCAL_PICTURE_DIR + filePath);
        if (file.exists()) {
            return file;
        }       
        URL fileURL = new URL(fileUrl);
        InputStream inputStream = fileURL.openStream();
        FileOutputStream outputStream = new FileOutputStream(file);
        byte[] array = new byte[1024];
        int length = inputStream.read(array);
        while (length >= 0) {
            outputStream.write(array, 0, length);
            length = inputStream.read(array);
        }
        inputStream.close();
        outputStream.close();
        return file;
    }
 /**
     * 图片绘制
     *
     * @param imageResult 结果图像
     * @param image 源图像
     * @param xLoc 结果图像的x坐标
     * @param yLoc 结果图像的y坐标
     * @param height 取自源图像高度
     * @param width 取自源图像宽度
     */
  private static void merge(BufferedImage imageResult, BufferedImage image, int xLoc, int yLoc, int width,
            int height) throws IOException {
        if (image == null) {
            return;
        }
        if (xLoc >= X_LENGTH || yLoc >= Y_LENGTH) {
            return;// 在目标图像的位置错误
        }
        if (xLoc + width >= X_LENGTH) {
            width = X_LENGTH - xLoc;// 修正源图像宽度
        }
        if (yLoc + height >= Y_LENGTH) {
            height = Y_LENGTH - yLoc;// 修正源图像高度
        }
        int[] imageArray = new int[width * height];
        // 将源图像转换成像素数组
        imageArray = image.getRGB(0, 0, width, height, imageArray, 0, width);
        // 将像素数组放入结果图像
        try {
            imageResult.setRGB(xLoc, yLoc, width, height, imageArray, 0, width);
        } catch (Exception e) {
            throw e;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值