Как я могу создавать идентификаторы, используя Java или Android?

Я видел много вопросов по этому поводу, но все они C#. Ни один из них не является Java, и я не мог найти подходящую библиотеку для этого.

образ

Какая библиотека может сделать это для меня программно, дав ей строку / хэш? Этот алгоритм фактически реализован на StackExchange.

2 ответа

Решение

Я решил проблему.

Я использовал Gravatar. Сначала я получил ссылку на изображение и сохранил его как String как это:

String identiconURL = "http://www.gravatar.com/avatar/" + userID + "?s=55&d=identicon&r=PG";

Затем я использовал Glide:

Glide.with(ProfilePictureChooserActivity.this)
      .load(identiconURL)
      .centerCrop()
      .into(imageView);

Вы можете посмотреть по этой ссылке. Существует код, который вы могли бы использовать для создания ваших идентификаторов http://www.davidhampgonsalves.com/Identicons

Код для Java следующий:

public static BufferedImage generateIdenticons(String text, int image_width, int image_height){
        int width = 5, height = 5;

        byte[] hash = text.getBytes();

        BufferedImage identicon = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        WritableRaster raster = identicon.getRaster();

        int [] background = new int [] {255,255,255, 0};
        int [] foreground = new int [] {hash[0] & 255, hash[1] & 255, hash[2] & 255, 255};

        for(int x=0 ; x < width ; x++) {
            //Enforce horizontal symmetry
            int i = x < 3 ? x : 4 - x;
            for(int y=0 ; y < height; y++) {
                int [] pixelColor;
                //toggle pixels based on bit being on/off
                if((hash[i] >> y & 1) == 1)
                    pixelColor = foreground;
                else
                    pixelColor = background;
                raster.setPixel(x, y, pixelColor);
            }
        }

        BufferedImage finalImage = new BufferedImage(image_width, image_height, BufferedImage.TYPE_INT_ARGB);

        //Scale image to the size you want
        AffineTransform at = new AffineTransform();
        at.scale(image_width / width, image_height / height);
        AffineTransformOp op = new AffineTransformOp(at, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
        finalImage = op.filter(identicon, finalImage);

        return finalImage;
}
Другие вопросы по тегам