java图片 亮度 对比度 调整

    <dependency>
      <groupId>com.jhlabs</groupId>
      <artifactId>filters</artifactId>
      <version>2.0.235</version>
    </dependency>

kaptcha 也是使用的该库进行图片处理

使用

    /**
     * 调整亮度、对比度
     *
     * @param image      需要处理的图片
     * @param brightness 亮度 【0,2】
     * @param contrast   对比度 【0,2】
     */
    private static void adjustBrightnessAndContrast(BufferedImage image, float brightness, float contrast) {
        ContrastFilter filter = new ContrastFilter();
        filter.setBrightness(brightness);
        filter.setContrast(contrast);
        filter.filter(image, image);
    }
Java调整图片对比度通常涉及到图像处理,可以使用一些开源库如Apache Commons Imaging或者Java Advanced Imaging (JAI) 来操作图像数据。以下是一个基本步骤: 1. **导入所需库**: 如果使用Apache Commons Imaging,首先需要添加其依赖到项目中。 ```java import org.apache.commons.imaging.ImageIO; import org.apache.commons.imaging.color.ColorSpace; import org.apache.commons.imaging.filter.Filter; import org.apache.commons.imaging.filter.IdentityFilter; import org.apache.commons.imaging.formats.jpeg.JpegImageWriteParam; ``` 2. **读取图片**: 使用`ImageIO.read()`方法加载图片文件。 ```java BufferedImage originalImage = ImageIO.read(new File("path_to_your_image.jpg")); ``` 3. **获取像素数组**: 将`BufferedImage`转换为像素数组,以便直接修改像素值。 ```java byte[] pixelData = originalImage.getRGB(0, 0, originalImage.getWidth(), originalImage.getHeight()); ``` 4. **调整对比度**: 可以通过创建自定义滤镜(Filter)来改变每个像素的亮度。例如,计算新的亮度值(对比度调整后的值),公式可能是 `(oldBrightness * contrast + darkOffset) / (1.0f + contrast)`,其中`contrast`是对比度系数,`darkOffset`防止过度增强导致溢出。 5. **应用滤镜**: 创建一个对比度滤镜,遍历像素并更新它们。 ```java double contrast = 1.5; // 你可以在这里设置对比度值 double darkOffset = 0.0; for (int i = 0; i < pixelData.length; i += 3) { int pixel = ((pixelData[i] & 0xFF) << 16) | ((pixelData[i + 1] & 0xFF) << 8) | (pixelData[i + 2] & 0xFF); // 进行对比度调整 int red = (int) Math.round(((ColorSpace.getInstance(ColorSpace.TYPE_RGB).toIndex(pixelData[i], pixelData[i + 1], pixelData[i + 2]) - ColorSpace.getInstance(ColorSpace.TYPE_RGB).getBlackPoint()) * contrast + darkOffset)); int green = (int) Math.round(((ColorSpace.getInstance(ColorSpace.TYPE_RGB).toIndex(pixelData[i + 1], pixelData[i + 2], pixelData[i + 3]) - ColorSpace.getInstance(ColorSpace.TYPE_RGB).getBlackPoint()) * contrast + darkOffset)); int blue = (int) Math.round(((ColorSpace.getInstance(ColorSpace.TYPE_RGB).toIndex(pixelData[i + 2], pixelData[i + 3], pixelData[i + 4]) - ColorSpace.getInstance(ColorSpace.TYPE_RGB).getBlackPoint()) * contrast + darkOffset)); // 更新像素 pixelData[i] = (byte) red; pixelData[i + 1] = (byte) green; pixelData[i + 2] = (byte) blue; } ``` 6. **保存调整后的图片**: 使用`ImageIO.write()`方法将处理过的像素数组写回到新的图片文件。 ```java JpegImageWriteParam param = new JpegImageWriteParam(null); param.setCompressionMode(JpegImageWriteParam.MODE_EXPLICIT); // 或者其他压缩模式 try (FileOutputStream out = new FileOutputStream("path_to_output_image.jpg")) { ImageIO.write(new BufferedImage(originalImage.getWidth(), originalImage.getHeight(), BufferedImage.TYPE_INT_BGR), "jpg", out, param); } catch (IOException e) { e.printStackTrace(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>