参考这篇文章,部分回答了我的问题:Force iOS to download image from HTML5 Canvas (using pure JavaScript)
总之,之前已经问过这个问题,一般的回答是它无法在iOS上完成。但是,这些问题已有几年的历史了, 回复上述问题的成员确实提供了部分答案:使用HTMLCanvasElement.toDataURL()将图像转换为数据URL,然后强制数据URL在新选项卡中作为图像打开。然后,可以通过手指在图像上下载,打开iOS保存对话框来下载。
问题是,即使我的保存代码下载了应用了CSS过滤器的图片,在iOS上的新标签页中打开的图片不也会应用过滤器。
所以,我的问题是,如何采取最后一步:强制在新标签页中打开的图像应用CSS过滤器,就像在计算机上下载的图像应用了CSS过滤器一样。
这是从原始画布获取图像并应用CSS过滤器的代码,创建一个应用了CSS过滤器的新图像:
function fileApply()
{
var cP = document.getElementById("cPreview");
var cntxCP = cP.getContext("2d");
var cS = document.getElementById("cSave");
var cntxCS = cS.getContext("2d");
// take whatever CSS filters are applied to the first canvas
var cssFilter = getComputedStyle(cP).filter;
// use those filter as the second canvas' context's filter
cS.width = cP.width;
cS.height = cP.height;
cntxCS.filter = cssFilter;
cntxCS.drawImage(cP, 0, 0);
cP.style.display = "none";
if (cS.style.display == "none") cS.style.display = "block";
}
这一切都有效。
这是保存代码:
function fileSave()
{
var canvas = document.getElementById('cSave');
if (document.getElementById("png").checked == true)
{
var quality = null; // canvas.toBlob() takes an extra argument if file type is JPG. Set quality to null to allow PNG downloads. Quality value will be supplied if JPG is selected.
var format = "image/png";
var name = "new_image.png";
}
if (document.getElementById("jpg").checked == true)
{
var format = "image/jpeg";
var quality = Number(document.getElementById("quality").value) / 100;
var name = "new_image.jpg"
}
if (!isIOS())
{
canvas.toBlob(function(blob) // Send canvas to blob and download blob
{
const anchor = document.createElement('a')
const url = URL.createObjectURL(blob)
anchor.href = url
anchor.download = name,
document.body.appendChild(anchor)
anchor.click()
document.body.removeChild(anchor)
URL.revokeObjectURL(url);
}, format, quality)
}
if (isIOS())
{
var iString = canvas.toDataURL(); // convert image to base64 string
document.getElementById("iOS").innerHTML = '<a href="' + iString + '">click me</a>'; // add string to url and target new tab.
}
在计算机上运行正常。在iOS上,在新选项卡中创建新图像,不使用应用CSS过滤器。
谢谢