ホームページ > バックエンド開発 > PHPチュートリアル > サーバーに保存するときに HTML5 キャンバス画像が破損するのはなぜですか?

サーバーに保存するときに HTML5 キャンバス画像が破損するのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-27 09:48:10
オリジナル
798 人が閲覧しました

Why Are My HTML5 Canvas Images Corrupted When Saving to the Server?

HTML5 キャンバスをサーバーに画像として保存する際のトラブルシューティング

問題

オンライン チュートリアルに従った後、HTML5 キャンバスを画像として保存しようとしますサーバー上でファイルが破損したり空になったりすることがあります。原因は不明のままです。

解決策

1. XMLHttpRequest を正しく構成します:

  • 古いブラウザと最新のブラウザの両方をサポートするには、カスタム XMLHttpRequest 作成を次のものに置き換えます:
var xmlHttpReq = false;
if (window.XMLHttpRequest) {
  ajax = new XMLHttpRequest();
} else if (window.ActiveXObject) {
  ajax = new ActiveXObject("Microsoft.XMLHTTP");
}
ログイン後にコピー
  • コンテンツタイプからapplication/x-www-form-urlencoded:
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ログイン後にコピー

2. PHP スクリプトを変更します:

  • substr($imageData, strpos($imageData, ",")) を substr($imageData, strpos($imageData, ",")) 1 に変更します。 .
  • ファイル ハンドルが有効かどうかを事前にチェックして、潜在的なエラーを処理します。書き込み:
if ($fp) {
  fwrite($fp, $unencodedData);
  fclose($fp);
}
ログイン後にコピー

改訂された JavaScript および PHP コード:

JavaScript

function saveImage() {
  var canvasData = canvas.toDataURL("image/png");
  var xmlHttpReq = false;

  if (window.XMLHttpRequest) {
    ajax = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    ajax = new ActiveXObject("Microsoft.XMLHTTP");
  }

  ajax.open("POST", "testSave.php", false);
  ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  ajax.onreadystatechange = function() {
    console.log(ajax.responseText);
  }
  ajax.send("imgData=" + canvasData);
}
ログイン後にコピー

PHP

<?php
if (isset($GLOBALS["HTTP_RAW_POST_DATA"])) {
  $imageData = $GLOBALS['HTTP_RAW_POST_DATA'];
  $filteredData = substr($imageData, strpos($imageData, ",")+1);
  $unencodedData = base64_decode($filteredData);

  if ($fp = fopen('/path/to/file.png', 'wb')) {
    fwrite($fp, $unencodedData);
    fclose($fp);
  }
}
?>
ログイン後にコピー

以上がサーバーに保存するときに HTML5 キャンバス画像が破損するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート