Base64 Bitmaps, созданные на двух разных устройствах Android, не идентичны

Я создаю растровое изображение после выполнения некоторых операций холста и рисования, а затем Base64 кодирую его в строку. Когда я повторяю процесс на отдельном устройстве и сравниваю строки в кодировке base64, возвращаемые двумя устройствами, они различаются. Любые идеи о том, почему это будет иметь место?

Код, который генерирует растровое изображение -

Bitmap bitmap = Bitmap.createBitmap(100, 100, Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.save();
canvas.rotate(45, midX, midY);
canvas.restore();
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setTextSize(45);
paint.setTextAlign(Align.CENTER);
paint.setTextColor(Color.parseColor(colorString));
StaticLayout staticLayout = new StaticLayout("Text", paint, width,Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
staticLayout.draw(canvas);

Код, который преобразует растровое изображение в строку в кодировке Base64 -

    int size = bitmap.getRowBytes() * bitmap.getHeight();
    byte[] byteArray;

    ByteBuffer byteBuffer = ByteBuffer.allocate(size);
    bitmap.copyPixelsToBuffer(byteBuffer);
    byteArray = byteBuffer.array();

    String encodedString =  Base64.encodeToString(byteArray, Base64.NO_WRAP);

2 ответа

Даже если шрифты абсолютно одинаковы, подсказки (как глифы, так и строки символов) будут зависеть от базового оборудования, а также от браузера.

Это хорошо известная характеристика холста HTML.

Если вы хотите иметь возможность генерировать одно и то же изображение на 2 разных устройствах, вам нужно работать с массивом uint с вашими собственными примитивами для рисования / вашими собственными обработчиками шрифтов.

Непонятно, откуда берется растровый объект из второго фрагмента кода, поэтому может быть множество объяснений.

Хотя я предполагаю, что в какой-то момент растровое изображение преобразуется в пиксели устройства, и это объясняет, почему вы получаете разные результаты на разных устройствах в зависимости от размера экрана и разрешения.

Маловероятно, что это проблема метода кодирования Base64, и вы можете проверить это, сравнив байтовый массив.

Другие вопросы по тегам