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, и вы можете проверить это, сравнив байтовый массив.