javascript - 浏览器可以生成不同分辨率的图像吗?
问题描述
给定一个图像,比如一个 jpeg 文件,有没有办法以不同的分辨率在网页上显示它?
请注意,与措辞相似的问题不同,我不是在谈论更改页面上图像的大小。
不,我不是要求 CSI 软件可以神奇地为低分辨率图像添加细节。
我想要的是这样的:
其中第一个图像是原始高分辨率文件(205×304),其他图像是中(82×122)和低(41×61)分辨率显示的相同文件。
是否有 CSS 或 javascript 可以做到这一点?
(CSSfilter: blur()
有类似的效果,但不是我想要的(例如没有锯齿)。)
解决方案
当然,您可以使用 <canvas> 元素非常简单地做到这一点,只需将其width
和height
属性设置为目标元素,然后在其上绘制图像。然后,如果您愿意,只需使用 CSS 调整这些画布的大小:
function downscale( img, width, height ) {
const canvas = document.createElement( 'canvas' );
canvas.width = width;
canvas.height = height;
const ctx = canvas.getContext('2d');
return new Promise( (resolve, reject) => {
if( img.naturalWidth ) { // if already loaded
draw();
}
else {
img.addEventListener( 'load', draw, { once: true } );
img.addEventListener( 'error', reject, { once: true } );
}
function draw() {
ctx.drawImage( img, 0, 0, width, height );
resolve( canvas );
}
} );
}
const img = document.querySelector( 'img' );
// original image size: 158 * 240
Promise.all( [
downscale( img, 79, 120 ),
downscale( img, 40, 60 )
] ).then( (canvases) =>
document.querySelector( '.img-container' )
.append( ...canvases )
)
.catch( console.error );
img, canvas { height: 240px }
<div class="img-container">
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Mona_Lisa.jpg/158px-Mona_Lisa.jpg"></div>
用 CSS 来做这件事在理论上听起来是可行的,例如通过使用width
和height
属性进行放大,然后使用转换进行缩小,但似乎实现只会批处理所有操作而不是一个一个地应用,因此两个操作只会相互还原。
推荐阅读
- java - 处理 FileUploadBase.SizeLimitExceededException
- c++ - 无范围枚举的基础类型?
- microsoft-graph-api - 获取没有开始和结束日期的事件
- laravel - PhpStorm 在访问 Auth::user()->id 时发出警告
- ios - UIWebView:s viewPrintFormatter() 返回...什么都没有?
- r - R 数据表搜索选项不处理外来编码(latin1)
- css - 如何将不同列的内容对齐在同一高度?
- c# - Webdriver 新的 DefaultWait 泛型
- linux - 比较两个目录中的文件名
- xamarin.forms - 如何在 Xamarin 上的 IOS 中查找 Url 是否已在自定义 HybridWebview 中完成加载