javascript - 使用 JavaScript,我可以将图像保存为其 CSS 缩略图大小吗?

标签 javascript jquery html css image

也许是一个奇怪的用例,但假设以下代码,其中 image1.jpg 是 1920x1080:

<a href="http://example.com/dir/photos/image1.jpg" target="_blank">
    <img src="http://example.com/dir/photos/image1.jpg">
</a>

如您所见,图像已完整加载到页面上;但是,上面没有显示的是用于将该图像显示为页面缩略图的 CSS(例如 480 x 270)。

是的,这是一个可怕的未优化做法。

我遇到的问题是客户在多个页面上发生了数百次此类事件。我正在尝试快速创建与页面上大小完全一致的图像缩略图版本。有些图像比其他图像更宽/更高,并且图像/文件夹名称到处都是,因此从呈现的页面创建每个图像的缩略图是我想要完成的任务。

理想情况下,我正在考虑使用 JS(或 jQuery,如果有人知道任何特定方法)来定位所有图像(无论如何需要发生)以最终创建和下载/保存缩略图作为其 CSS 大小-页面表示。

我希望这个问题是有道理的。如果需要,我很乐意澄清更多。感谢您提供的任何帮助!

最佳答案

以下代码从页面中获取所有图像,并将它们缩放到用于渲染的有效 CSS 大小,然后执行下载。 它的工作方式如下:

  1. 生成一个空的 Canvas 元素
  2. 生成图片,并在其中加载原始图片元素源
  3. 使用原始图像大小将新图像的内容转储到 Canvas 中。
  4. 将 Canvas 的内容转储回原始图像元素
  5. 执行 download() 函数(仅适用于 chrome)

function scaleToElementSize(img){
  return new Promise( (resolve,reject)=>{
    // create an empty canvas and assign to it
    // the rendered proportions of the provided image 
    let c = document.createElement('canvas');
    c.height = img.height;
    c.width = img.width ;
    const ctx = c.getContext("2d");

    // create an image element, and load the source
    // image in it
    let i = new Image();
    i.setAttribute('crossOrigin', 'anonymous');
    i.src = img.src;

    // when image is loaded, copy its contenta scaled     
    // into the canvas, dump the resulting scaled
    // image back, to the original image, and download
    i.onload = ()=>{
       ctx.drawImage(i, 0, 0, c.width, c.height); 
       img.setAttribute('filename', img.src);
       img.onload = null;
       img.src =  c.toDataURL("image/png");
       resolve();
    }
  });
}

function download(img){
  var link = document.createElement('a');
  link.download = img.getAttribute('filename');
  link.href = img.src.replace("image/png", "image/octet-stream");;
  link.click();
}

 document.querySelectorAll('img').forEach( img=>{
   img.onload= function(){ 
     scaleToElementSize(img)
     .then( ()=> download(img) )
   }
 })
<img src="https://placekitten.com/200/286?a.jpg" width="100">
<img src="https://placekitten.com/200/139?b.jpg" width="200">
<img src="https://placekitten.com/408/287?c.jpg" width="110">

关于javascript - 使用 JavaScript,我可以将图像保存为其 CSS 缩略图大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52176469/

相关文章:

java - 使用文本文件中的数据创建重定向链接

javascript - 我应该使用 <td> 还是 <div> 和嵌套的 <div> 来包含缩略图

javascript - 将 Google map 添加到 AngularJS 和 Ionic 应用程序

javascript - 如何将内容放入布局

javascript - 使用 Vue.js 过滤列表

javascript - js中的表单数量在页面刷新后不会重置,django和django-dynamic-formsets

javascript - 带有过滤器的 SVG 到 HTML5 Canvas 实现

java - 在 Web 应用程序中实现长时间运行的流程

JQuery .hover() 外部函数

javascript - 单击超链接可重定向到特定大小的另一个 html 页面(或子窗口)