.toDataURL() от Safari до PHP отображает полное белое изображение (не нарисованная область)


Краткое описание: Допустим, я рисую белый смайлик с элементом canvas в браузере. Когда я создаю строку изображения для публикации на PHP-сервере с этого холста с помощью js/ajax (с помощью toDataURL ("изображение/png")) в Safari, изображение, созданное на сервере с помощью функций PHP imagecreatefromstring() и imagepng(), имеет правильную высоту и ширину, но оно все белое, вместо смайлика с холста в браузере.

Я удаляю "данные:изображение/png; base64" из строки перед base64_decoding и сохранением в файл изображения.

Этот метод безупречно работает в FF и Chrome.

Строка в кодировке base64, которую toDataURL генерирует в js, проверяется как та же строка, которую получает сервер, поэтому она не прерывается при передаче.

Когда я загружаю строку изображения из toDataURL() в любой браузер, она отображает нарисованное изображение, как и ожидалось. Однако новый файл.png, созданный на сервере, полностью белый.

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

Пожалуйста, не стесняйтесь, дайте мне знать, если вам нужна дополнительная информация.

Заранее благодарю вас!

РЕДАКТИРОВАТЬ: может ли это быть связано с тем, как Safari сохраняет прозрачность?

Author: Doug Johnson, 2012-04-23

1 answers

Вы пробовали экспортировать изображение без прозрачности? Вы можете рассмотреть возможность заполнения фона сплошным цветом перед вызовом toDataURL.

var ctx = document.getElementById('my_canvas').getContext('2d');
var w = $("#my_canvas").width();
var h = $("#my_canvas").height();
ctx.globalCompositeOperation = 'lighter';
ctx.fillStyle = "#000";
ctx.fillRect( 0, 0, w, h );

Что-то подобное должно привести к более последовательному результату.

 1
Author: fkorf, 2012-04-23 19:25:41