【发布时间】:2020-11-23 04:07:57
【问题描述】:
所以我正在制作一个模因生成器,用户可以选择输入图片链接或从存储中上传本地文件。
这是我用于链接/本地存储上传的 html。
<div class="Main_Grid_Item Link_Upload_Div">
<form action="/" method="POST">
<p>Enter Image Link:</p>
<input class="Image_Input" type="text" name="Link_Url" placeholder="Image Link"><br>
<button class="Image_Submit" type="submit" name="button">Submit Image</button>
</form>
</div>
<div class="Main_Grid_Item File_Upload_Div">
<form>
<p>Upload Image:</p>
<input id = "UploadOutput" class = "Upload_Output" type="text" placeholder="Image Name After Upload" readonly><br>
<label for="ImgStorage" class="Image_Upload_Label">Upload Image</label>
<input type='file' id="ImgStorage" />
</form>
<br>
</div>
对于专门的文件上传,这是我的 javascript,主要是从这个堆栈线程复制的:Javascript image upload and display
function readURL(input) {
//if picture exists then create a new FileReader
if (input.files && input.files[0]) {
var reader = new FileReader();
//the image with specified id gets url
reader.onload = function (e) {
$("#blah").attr("src", e.target.result);
};
//reads picture
reader.readAsDataURL(input.files[0]);
} }
只是为了澄清输入链接/上传图像确实可以双向工作,并且图像可以正确显示在屏幕上。我面临的问题是使用 html 2 画布进行“截图”时。
这是我用 html2canvas 截屏的 javascript 代码
//takes screenshot of Meme with overlay
$("#Save_Meme_Button").on("click", memeScreenShot);
function memeScreenShot() {
html2canvas(document.querySelector(".Main_Image_Div")).then((canvas) => {
document.body.appendChild(canvas);
});
}
此代码实质上是对图像进行“屏幕截图”,然后将其显示在网站下方。问题是当我上传带有 url 的图片时,“截图”图片有时会产生空白图片。
但是,如果我转到 image-url,将图像下载到本地存储,然后使用其他选项从本地存储上传图像,则图像会成功保存,而不是显示空白图像。
与通过本地存储上传相比,通过链接上传时有时会出现图像的空白屏幕截图有什么原因吗?我在文档上查看了一些关于受污染的画布的信息,但我不确定这是否是问题所在,因为上传/保存图像时控制台中没有错误: https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image#:~:text=Security%20and%20tainted%20canvases,-Because%20the%20pixels&text=As%20soon%20as%20you%20draw,an%20exception%20to%20be%20thrown.
当我启用 useCors 选项时,当图像上传为空白时,我收到一个 cors 错误。我认为这就是为什么链接选项不起作用而本地存储起作用的原因 enter image description here
显示图像的代码
<div id = "MainImageDiv" class="Main_Image_Div">
<% if(typeof imgUrl !== 'undefined'){ %>
<img id="blah" src=<%= imgUrl %> class="Main_Image" /></img>
<% } else{ %>
<img id="blah" src="/images/stonks.png" class="Main_Image" /></img>
<% } %>
<p id="TopTextPar" class="Top_Text"></p>
<p id="BottomTextPar" class="Bottom_Text"></p>
</div>
【问题讨论】:
-
能否包含将图像绘制到画布上的代码?我认为您需要等待它加载。
-
唯一与画布相关的代码是我提供的那个。当div被截屏时,截屏的图像只是添加到本网站的底部。像这样:codepen.io/MySecondLife/pen/QQjLgN 我不认为我需要等待图像渲染,因为当我上传带有本地存储的图像时它可以正常工作,有时在我上传带有 url 的图像时可以正常工作(这是问题)跨度>
-
您是否包含了显示来自 URL 的图像的代码?
-
我已经添加了。我在 html2canvas 中启用了 useCors 选项,它给了我一个 CORS 错误。我试过使用这个代理npmjs.com/package/html2canvas-proxy,但我不确定在我的 app.js(Node) 中在哪里启用代理。我也会在我的帖子末尾附上我的回购
标签: javascript html jquery html2canvas