老照片效果算法
老照片效果算法

将图片处理成老照片,是通过对像素上的RGB根据一定的算法生成对应的比例调节来完成的。
其中公式算法为:
R_new=0.393*R+0.769*G+0.189*B;
G_new=0.349*R+0.686*G+0.168*B;
B_new=0.272*R+0.534*G+0.131*B;

注意:该算法可能会算出单色大于255,如:
原rgb为:r:225,g:219,b:145 转换后:
新rgb为:r:284,g:253,b:197
此时需要强制赋值为255。

原图如下:

效果图如下:

核心代码如下:


/**
 * 对图片增加滤镜
 *
 * @param image 图片
 * @return 增加滤镜之后的图片
 */
@Override
public BufferedImage pictureAddFilter(BufferedImage image) {

    int width = image.getWidth();
    int height = image.getHeight();
    int minWidth = image.getMinX();
    int minHeight = image.getMinY();

    for (int i = minWidth; i < width; i++) {
        for (int y = minHeight; y < height; y++) {
            int rgb = image.getRGB(i, y);
            Color color = new Color(rgb);
            color = filterColor(color);
            image.setRGB(i,y,color.getRGB());
        }
    }
    return image;
}
/**
 * 对像素color 进行处理
 *
 * @param color 原color
 * @return 新color
 * r:225,g:219,b:145 对该rgb 转换,可得到下面的值
 * r:284,g:253,b:197
 *
 */
@Override
protected Color filterColor(Color color) {
    int r = (int) (color.getRed() * 0.393 + color.getGreen() * 0.769 + color.getBlue() * 0.189);
    int g = (int) (color.getRed() * 0.349 + color.getGreen() * 0.686 + color.getBlue() * 0.168);
    int b = (int) (color.getRed() * 0.272 + color.getGreen() * 0.534 + color.getBlue() * 0.131);
    r = r > 255 ? 255 : r;
    g = g > 255 ? 255 : g;
    b = b > 255 ? 255 : b;
    return new Color(r, g, b);
}
                    
Copyright © 2019-2020 2024-11-21 17:40:21