我在PHP上的imagecreatefromstring
函数遇到问题。
我在前端(HTML)网页上有一个输入文件,用户可以在其中选择照片。
当用户选择一张图片时,JavaScript函数运行一个例程,该例程创建一个base64字符串,该字符串将传递到后端(服务器中的PHP文件)。
PHP中的一个函数采用该base64字符串,并使用imagecreatefromstring()
函数再次将其转换为imagen。
这是问题所在,当用户从一台设备(例如摩托罗拉手机)上传图片时,转换,过去以及反之亦然。
但是,当用户从其他设备(例如J7 Samsung等其他手机)上传图片时,该过程被切入了某个地方(不知道确切的位置),并且最终的图像文件被保存了一半。 >
在这里,我发布了javascript转换功能:
function ResizeImage(imageFile, Elemento) {
var filesToUpload = imageFile.files;
var file = filesToUpload[0];
var form = document.getElementById("ppal_form");
// Create an image
var img = document.createElement("img");
// Create a file reader
var reader = new FileReader();
// Set the image once loaded into file reader
reader.onload = function(e) {
img.src = e.target.result;
var canvas = document.createElement("canvas");
//var canvas = $("<canvas>", {"id":"testing"})[0];
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
var MAX_WIDTH = img.width / 4;
var MAX_HEIGHT = img.height / 4;
var width = img.width;
var height = img.height;
if (width > height) {
if (width > MAX_WIDTH) {
height *= MAX_WIDTH / width;
width = MAX_WIDTH;
}
} else {
if (height > MAX_HEIGHT) {
width *= MAX_HEIGHT / height;
height = MAX_HEIGHT;
}
}
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, width, height);
var dataurl = canvas.toDataURL("image/png",0.5);
console.log(dataurl);
auxinput = $('#aux_files1');
auxinput.attr('value', dataurl);
imageFile.value = "";
}
// Load files into file reader
reader.readAsDataURL(file);
//alert('se ejecuto funcion ResizeImage');
}
以及将字符串再次转换为图像的PHP函数:
public static function base64_to_jpeg($base64_string, $output_file) {
// open the output file for writing
$ifp = fopen( $output_file, 'wb' );
// split the string on commas
// $data[ 0 ] == "data:image/png;base64"
// $data[ 1 ] == <actual base64 string>
$data = explode( ',', $base64_string );
// we could add validation here with ensuring count( $data ) > 1
fwrite( $ifp, base64_decode( $data[ 1 ] ) );
// clean up the file resource
fclose( $ifp );
return $output_file;
}