概要: ブラウザーで canvas 要素を使用して白いスマイリー フェイスを描画するとします。このキャンバスから Safari で js/ajax ( toDataUrl('image/png') を使用) 経由で PHP サーバーに POST する画像文字列を生成すると、PHP 関数 imagecreatefromstring() および imagepng() を使用してサーバー上に作成された画像が適切な高さと幅ですが、ブラウザのキャンバスのスマイリーフェイスではなく、すべて白です。
base64_decoding の前に文字列から「data:image/png;base64」を取り除き、画像ファイルに保存しています。
この方法は、FF と Chrome で問題なく機能します。
toDataUrl が js で生成している base64 でエンコードされた文字列は、サーバーが受信している文字列と同じであることが検証されているため、転送で途切れることはありません。
toDataUrl() から画像文字列をブラウザにロードすると、描画された画像が期待どおりに表示されます。ただし、サーバー上で生成される newimage.png はすべて白です。
サーバーで説明する必要があるbase64文字列に画像をエンコードするためにSafariが行うこととは何か違いがありますか? もしそうなら、どんなブラウザでも画像文字列から正しいスマイリーフェイスをレンダリングできるので、それほど劇的であってはなりません。
さらに情報が必要な場合は、お気軽にお知らせください。
前もって感謝します!
編集:Safariが透明性を保存する方法に関連している可能性がありますか?