Как преобразовать изображение в сепию в Java?

Я ищу бесплатную или платную библиотеку.

Обновить

Похоже, что такой библиотеки нет, но следующий код работает так, как ожидалось:

/**
*
* @param img Image to modify
* @param sepiaIntensity From 0-255, 30 produces nice results
* @throws Exception
*/
public static void applySepiaFilter(BufferedImage img, int sepiaIntensity) {
    // Play around with this. 20 works well and was recommended
    // by another developer. 0 produces black/white image
    int sepiaDepth = 20;

    int w = img.getWidth();
    int h = img.getHeight();

    WritableRaster raster = img.getRaster();

    // We need 3 integers (for R,G,B color values) per pixel.
    int[] pixels = new int[w*h*3];
    raster.getPixels(0, 0, w, h, pixels);

    // Process 3 ints at a time for each pixel.
    // Each pixel has 3 RGB colors in array
    for (int i=0;i<pixels.length; i+=3) {
        int r = pixels[i];
        int g = pixels[i+1];
        int b = pixels[i+2];

        int gry = (r + g + b) / 3;
        r = g = b = gry;
        r = r + (sepiaDepth * 2);
        g = g + sepiaDepth;

        if (r>255) r=255;
        if (g>255) g=255;
        if (b>255) b=255;

        // Darken blue color to increase sepia effect
        b-= sepiaIntensity;

        // normalize if out of bounds
        if (b<0) b=0;
        if (b>255) b=255;

        pixels[i] = r;
        pixels[i+1]= g;
        pixels[i+2] = b;
    }
    raster.setPixels(0, 0, w, h, pixels);
}

person Antonio    schedule 27.02.2011    source источник
comment
Эй, хорошая работа! Есть ли какая-нибудь справочная информация о фильтре сепии? я нашел только некоторые реализации. Я хочу знать кое-что о теории   -  person 501 - not implemented    schedule 24.07.2012


Ответы (2)


http://www.swissdelphicenter.ch/en/showcode.php?id=1794

http://www.rhinocerus.net/forum/lang-java-programmer/574119-sepia-tone-image-filter-java.html

person Arun    schedule 27.02.2011
comment
Вторая ссылка в настоящее время ведет на вредоносный/фишинговый сайт. Попробуйте stackoverflow.com/questions/21899824/ вместо этого - person mwoodman; 22.07.2016

Это можно сделать с помощью эффекта SepiaTone. в библиотеке JavaFX.

person Pikalek    schedule 12.07.2015