我有一张可以附加照片的表格,如果这张照片很大,上传的照片会改变尺寸:
function resizeImage($form) {
var filesToUploads = document.getElementById('file').files;
var button = $form.find('.btn');
button.addClass('loading');
if (filesToUploads.length > 0) {
var file = filesToUploads[0];
if (file) {
var reader = new FileReader();
// Set the image once loaded into file reader
reader.onload = function(e) {
var img = document.createElement("img");
img.src = e.target.result;
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
var MAX_WIDTH = 800;
var MAX_HEIGHT = 800;
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);
dataurl = canvas.toDataURL(file.type);
urltoFile(dataurl, file.name, file.type)
.then(function(file){
newFile = file;
console.log(newFile);
})
.finally(() => {
button.removeClass('loading');
});
}
reader.readAsDataURL(file);
}
} else {
console.log('Image not found');
}
}
function urltoFile(url, filename, mimeType){
return (fetch(url)
.then(function(res){return res.arrayBuffer();})
.then(function(buf){return new File([buf], filename,{type:mimeType});})
);
}
使用resizeImage
调整图像大小,然后使用urltoFile
将其转换为文件以格式发送
在php端,即收到的$ _FILE
,我将其转换为base64,然后将其发送到与照片一起发送电子邮件(如果存在)的函数中,我可以这样做:>
if(isset($_FILES['file']))
{
$path = $_FILES['file']['tmp_name'];
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$encoded_file = chunk_split(base64_encode($data));
$attachments[] = array(
'name' => $_FILES['file']['name'], // Set File Name
'data' => $encoded_file, // File Data
'type' => $_FILES['file']['type'], // Type
'encoding' => 'base64' // Content-Transfer-Encoding
);
$file = json_encode($attachments);
}
这对我在Web上非常有效-mac-android,图像在邮件中的到达效果很好,问题是从iphone
发送照片时出现的,图像总是在电子邮件中损坏,这是未显示在预览中或下载时
我不知道问题可能是什么,或者为什么它不能仅通过iphone起作用