Maison > développement back-end > tutoriel php > Pourquoi mes images HTML5 Canvas sont-elles corrompues lors de l'enregistrement sur le serveur ?

Pourquoi mes images HTML5 Canvas sont-elles corrompues lors de l'enregistrement sur le serveur ?

Mary-Kate Olsen
Libérer: 2024-12-27 09:48:10
original
798 Les gens l'ont consulté

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

Dépannage lors de l'enregistrement d'un canevas HTML5 en tant qu'image sur le serveur

Problème

Après avoir suivi les didacticiels en ligne, tentative d'enregistrement d'un canevas HTML5 en tant qu'image sur le serveur entraîne des fichiers corrompus ou vides. La cause reste inconnue.

Solution

1. Configurez correctement XMLHttpRequest :

  • Remplacez la création XMLHttpRequest personnalisée par ce qui suit pour prendre en charge les navigateurs anciens et modernes :
var xmlHttpReq = false;
if (window.XMLHttpRequest) {
  ajax = new XMLHttpRequest();
} else if (window.ActiveXObject) {
  ajax = new ActiveXObject("Microsoft.XMLHTTP");
}
Copier après la connexion
  • Définissez le Type de contenu à application/x-www-form-urlencoded :
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
Copier après la connexion

2. Modifiez le script PHP :

  • Changez substr($imageData, strpos($imageData, ",")) en substr($imageData, strpos($imageData, ",")) 1 .
  • Gérez les erreurs potentielles en vérifiant si le descripteur de fichier est valide avant écriture :
if ($fp) {
  fwrite($fp, $unencodedData);
  fclose($fp);
}
Copier après la connexion

Code JavaScript et PHP révisé :

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);
}
Copier après la connexion

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);
  }
}
?>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal