Linux实战笔记(二) awk基本使用

简介: Linux实战笔记(二) awk基本使用

正文


1、背景


在网页展示图片是一个很常见的需求,大多数情况下,展示区域的大小是固定的,原图片的大小也是固定的


如果展示区域的宽高和原图片的宽高不等比例,那么在默认情况下很可能会压缩或拉伸图片以适应区域大小


下面我们用两张图片做一个对比实验,假设展示区域的宽高都是 300px

横向图片的宽高分别是 722px 和 88px,纵向图片的宽高分别是 80px 和 525px

<!DOCTYPE html>
<html>
<head>
    <style>
        .image {
            width: 300px;
            height: 300px;
        }
    </style>
</head>
<body>
    <img class="image" src="test.png">
</body>
</html>

f64df1fc63cef1b30af234441ba3770b_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dzbXJ6eA==,size_16,color_FFFFFF,t_70#pic_center.png


ea67f5f5fd4875955eec10e5bb27edb3_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dzbXJ6eA==,size_16,color_FFFFFF,t_70#pic_center.png


2、设置 CSS


很显然,这并不是我们想要的,因为它会导致图片变形压缩,我们需要找到一种办法,能让图片等比例缩放

最简单的方法莫过于设置 CSS,使得图片可以自动适应展示区域的大小,代码非常简单

<!DOCTYPE html>
<html>
<head>
    <style>
        .image-box {
            width: 300px;
            height: 300px;
        }
        .image {
            width: auto;
            height: auto;
            max-width: 100%;
            max-height: 100%;
        }
    </style>
</head>
<body>
    <div class="image-box">
        <img class="image" src="test.png">
    </div>
</body>
</html>


01d917e3bdcfe63ccb5f77c539dbb293_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dzbXJ6eA==,size_16,color_FFFFFF,t_70#pic_center.png

0d015053658fd1a974b750a5ed14a21b_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dzbXJ6eA==,size_16,color_FFFFFF,t_70#pic_center.png


3、使用 canvas


设置 CSS 样式之后,图片会按照最小边进行等比例缩放,这种解决办法已经可以满足大多数的使用场景


但有时候我们会希望展示区域被占满,鱼和熊掌不可兼得,这时我们不得不裁剪图片能够等比例缩放的最大区域


实际上就是用一个与展示区域等比例的矩形截取图片,并要求截取出来的图片尽可能大且位于原图片的中心位置


333.png


33.png

<!DOCTYPE html>
<html>
<head>
    <script>
        window.onload = function() {
            let cvs = document.querySelector('#image')
            let ctx = cvs.getContext('2d')
            let img = new Image()
            img.src = 'test.png'
            img.onload = () => {
                let adaptedImage = adaptImage(0, 0, img.width, img.height, 0, 0, cvs.width, cvs.height)
                ctx.drawImage(img, ...adaptedImage)
            }
        }
        function adaptImage(imgX, imgY, imgW, imgH, cvsX, cvsY, cvsW, cvsH) {
            let idealW = imgW
            let idealH = cvsH + (imgW - cvsW) * (cvsH / cvsW)
            if (idealH <= imgH) {
                return [0, imgH / 2 - idealH / 2, idealW, idealH, cvsX, cvsY, cvsW, cvsH]
            } else {
                idealH = imgH
                idealW = cvsW + (imgH - cvsH) * (cvsW / cvsH)
                return [imgW / 2 - idealW / 2, 0, idealW, idealH, cvsX, cvsY, cvsW, cvsH]
            }
        }
    </script>
</head>
<body>
    <canvas id="image" width="300" height="300">
</body>
</html>


20210430203336254.png

1.png



目录
相关文章
|
8月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
2008 77
|
6月前
|
运维 监控 中间件
Linux运维笔记 - 如何使用WGCLOUD监控交换机的流量
WGCLOUD是一款开源免费的通用主机监控工具,安装使用都非常简单,它可以监控主机、服务器的cpu、内存、磁盘、流量等数据,也可以监控数据库、中间件、网络设备
|
Ubuntu Linux Python
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
693 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
|
8月前
|
关系型数据库 MySQL 应用服务中间件
Linux 手动安装快速部署 LNMP 环境实战
本文详细记录了在阿里云ECS上手动搭建LNMP环境的过程,系统选用Ubuntu 24.04。主要内容包括:1) 使用`apt`安装Nginx和MySQL,并更新软件源;2) 编译安装PHP 8.4.5,配置PHP-FPM及环境路径;3) 配置MySQL root用户密码;4) 调整Nginx支持PHP解析并测试整体环境。通过此过程,重现手动配置服务器的细节,帮助熟悉各组件的安装与协同工作。
594 23
|
Linux Perl
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
|
11月前
|
监控 Linux 数据处理
Linux grep技巧 结合awk查询
结合 `grep` 和 `awk`,可以实现灵活、高效的文本处理和数据分析。`grep` 用于快速过滤符合条件的行,`awk` 用于进一步处理和提取数据。这种组合使用在日志分析、数据处理和系统监控等场景中尤为常见。掌握这两者的基本用法和组合技巧,可以大大提升在 Linux 环境下的工作效率。
313 7
|
Linux Perl
Linux awk命令使用技巧
【10月更文挑战第16天】Linux awk命令使用技巧
292 4
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
439 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
存储 安全 Linux
Linux文件管理命令md5sum awk
通过结合 `md5sum`和 `awk`,不仅可以高效地进行文件完整性校验,还能灵活地处理和分析校验结果,为系统管理、数据审计等工作提供强大的支持。
313 2
下一篇
oss云网关配置