如何将内联 IMG SRC data:image 与 JavaScript 一起传输到 PHP?
How Can Inline IMG SRC data:image Be Transferred With JavaScript to PHP?
下面是一个包含内联 base64 图像数据的元素(为了适应此处进行了缩写)。 JavaScript如何获取内联数据并将其发送给PHP?如果可以避免中间 canvas 就好了,因为原始数据已经可用。
在页面中:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEU4Xoy9WY9k6" id="photo">
我目前使用的 JavaScript 单击元素触发传输到 PHP,这会将一个 0 字节的 .png 文件保存到磁盘:
$("#photo").click(function() {
var xhr = new XMLHttpRequest();
xhr.open('POST', 'uploadPhoto.php', true);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
var data = 'image=' + this.src;
xhr.send(data);
});
uploadPhoto.php,它接收数据并将其写入磁盘:
<?php
if ($_POST) {
define('UPLOAD_DIR', '/photos/');
$img = $_POST['image'];
$img = str_replace('data:image/jpeg;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$file = UPLOAD_DIR . uniqid() . '.png';
$success = file_put_contents($file, $data);
print $success ? $file : 'Unable to save the file.';
} else {
print 'Unable to save ' . $_POST['image'];
}
?>
缺少什么?
解决方案更新
根据@EhsanT,原始数据的 png 格式在 php 中不匹配,因此 php 中的这一行现在有 png,而 jpeg 曾经是:
str_replace('data:image/png;base64,', '', $img);
在您提供的这个特定示例代码中,您唯一做错的是您有一个 PNG
base64 图像数据,而在您的 uploadPhoto.php
文件中您期望 JPG
文件.
所以在 uploadPhoto.php
文件中只需更改这一行:
$img = str_replace('data:image/jpeg;base64,', '', $img);
对此:
$img = str_replace('data:image/png;base64,', '', $img);
一切顺利
下面是一个包含内联 base64 图像数据的元素(为了适应此处进行了缩写)。 JavaScript如何获取内联数据并将其发送给PHP?如果可以避免中间 canvas 就好了,因为原始数据已经可用。
在页面中:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEU4Xoy9WY9k6" id="photo">
我目前使用的 JavaScript 单击元素触发传输到 PHP,这会将一个 0 字节的 .png 文件保存到磁盘:
$("#photo").click(function() {
var xhr = new XMLHttpRequest();
xhr.open('POST', 'uploadPhoto.php', true);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
var data = 'image=' + this.src;
xhr.send(data);
});
uploadPhoto.php,它接收数据并将其写入磁盘:
<?php
if ($_POST) {
define('UPLOAD_DIR', '/photos/');
$img = $_POST['image'];
$img = str_replace('data:image/jpeg;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$file = UPLOAD_DIR . uniqid() . '.png';
$success = file_put_contents($file, $data);
print $success ? $file : 'Unable to save the file.';
} else {
print 'Unable to save ' . $_POST['image'];
}
?>
缺少什么?
解决方案更新
根据@EhsanT,原始数据的 png 格式在 php 中不匹配,因此 php 中的这一行现在有 png,而 jpeg 曾经是:
str_replace('data:image/png;base64,', '', $img);
在您提供的这个特定示例代码中,您唯一做错的是您有一个 PNG
base64 图像数据,而在您的 uploadPhoto.php
文件中您期望 JPG
文件.
所以在 uploadPhoto.php
文件中只需更改这一行:
$img = str_replace('data:image/jpeg;base64,', '', $img);
对此:
$img = str_replace('data:image/png;base64,', '', $img);
一切顺利