我使用Open Seadragon在页面上显示深度缩放图像。我想要包含一个下载图像的链接。我主要使用它,除了下载的图像是空白的。
以下是我使用
的代码function seadragon(){
var url = "http://26.img.americanancestors.org/8e09e1f1-e1e9-4414-a0f5-86a6f09454a2.xml";
var viewer = OpenSeadragon({
id: "databaseviewer",
prefixUrl: "../../Scripts/openseadragon/images/",
tileSources: url,
maxZoomLevel: 20
});
viewer.addHandler('open', function() {
var img = viewer.drawer.canvas.toDataURL("image/png");
console.log(img);
var downloadlink = document.getElementById("download");
downloadlink.href = img;
downloadlink.download = 'SeadragonImage';
});
}
seadragon();
答案 0 :(得分:0)
您需要等到所有瓷砖都已装入。对于常规使用,这不会是一个问题,因为用户可能会在他们看到某些东西之前不会按下按钮。
答案 1 :(得分:0)
自从这个问题在 6 年前发布以来,问题中提供的 url 似乎不再有效。但我刚刚遇到了类似的问题,所以分享答案,以防其他人遇到这个问题。这是 url ='https://pgalawfirm.com/wp-content/uploads/2017/05/pga-logo-mobile-view.png' 的另一个示例。请注意,此代码适用于非 svg 图像。 (jpg, jpeg, ico)
使用标准方法下载此图像将导致下载看似空白的图像。那是因为,像这样(“RGBA”模式)的一些图像实际上是全白的,您在网站上看到它们的原因是透明度参数 alpha。因此,您正在将全白图像下载到白色背景上,因此它们看起来是“空白”的。这是如何检查图像是否为全白,如果是,更改背景然后保存的代码。
import numpy as np
from statistics import mean
import PIL.Image
import requests
from tqdm import tqdm
image_url = 'https://pgalawfirm.com/wp-content/uploads/2017/05/pga-logo-mobile-view.png'
filename = 'non_blank_image.png'
def transparency_factor(im):
matrix_img = np.asarray(im)
w = im.width
h = im.height
mean_distribution =[]
for i in range (0, w):
r = mean(matrix_img[:,i,0])
g = mean(matrix_img[:,i,1])
b = mean(matrix_img[:,i,2])
mean_distribution.append(mean([r,g,b]))
avg_colour =[mean([r,g,b])]
if avg_colour[0] == 255:
transparency_factor = True
else:
transparency_factor = False
return transparency_factor
def remove_transparency(im, bg_colour=(200, 200, 200)):
if im.mode in ('RGBA', 'LA') or (im.mode == 'P' and 'transparency' in im.info):
alpha = im.convert('RGBA').split()[-1]
bg = PIL.Image.new("RGBA", im.size, bg_colour + (255,))
bg.paste(im, mask=alpha)
return bg
else:
return im
def download_image(image_url): # any type apart from svg
response = requests.get(image_url, stream=True)
file_size = int(response.headers.get("Content-Length", 0))
progress = tqdm(response.iter_content(1024), f"Downloading {filename}",
total=file_size, unit="B", unit_scale=True, unit_divisor=1024)
with open(filename, "wb") as f:
for data in progress.iterable:
f.write(data)
progress.update(len(data))
download_image(image_url)
im = PIL.Image.open(filename)
im.mode
if im.mode == 'RGBA':
if transparency_factor(im):
im = remove_transparency(im)
im.save(filename)