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



目录
相关文章
|
2天前
|
Linux Perl
Linux|了解如何使用 awk 内置变量
Linux|了解如何使用 awk 内置变量
10 1
|
2天前
|
数据挖掘 Linux vr&ar
Linux命令实战:解决日常问题的利器
Linux命令实战:解决日常问题的利器
|
4天前
|
安全 Linux Shell
Linux常用命令详解与实战应用
【5月更文挑战第7天】本文详述了Linux常用命令,包括文件与目录操作(ls, cd, pwd, cp, mv, rm)、文本处理(cat, grep, sed)及系统管理(top, df, du)命令。通过实例演示了如何使用这些命令,帮助读者理解和掌握Linux操作,提升系统管理效率。学习和熟练运用这些基础命令,是高效使用Linux的关键。
|
5天前
|
存储 运维 Java
Linux笔记02 —— Shell补充
Linux笔记02 —— Shell补充
30 2
|
5天前
|
安全 Linux Shell
Linux笔记01 —— Linux初识与Shell汇总(请配合另一篇《Linux笔记02》一起使用)
Linux笔记01 —— Linux初识与Shell汇总(请配合另一篇《Linux笔记02》一起使用)
17 1
|
5天前
|
安全 Linux Android开发
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
该文介绍了如何在Linux服务器上交叉编译Android的FFmpeg库以支持HTTPS视频播放。首先,从GitHub下载openssl源码,解压后通过编译脚本`build_openssl.sh`生成64位静态库。接着,更新环境变量加载openssl,并编辑FFmpeg配置脚本`config_ffmpeg_openssl.sh`启用openssl支持。然后,编译安装FFmpeg。最后,将编译好的库文件导入App工程的相应目录,修改视频链接为HTTPS,App即可播放HTTPS在线视频。
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
|
10天前
|
运维 监控 Linux
提升系统稳定性:Linux内核参数调优实战
【5月更文挑战第1天】 在运维领域,保障服务器的高效稳定运行是核心任务之一。Linux操作系统因其开源、可靠和灵活的特点被广泛应用于服务器中。本文将深入探讨通过调整Linux内核参数来优化系统性能,提升服务器的稳定性和响应能力。文章首先介绍了内核参数调优的必要性和基本原则,然后详细阐述了调优过程中的关键步骤,包括如何监控当前系统状态,确定性能瓶颈,选择合适的参数进行调优,以及调优后的测试与验证。最后,文中提供了一些常见问题的解决策略和调优的最佳实践。
49 5
|
12天前
|
Linux Shell Perl
Linux | awk 特殊模式“BEGIN 和 END”
Linux | awk 特殊模式“BEGIN 和 END”
21 2
|
14天前
|
运维 网络协议 Linux
【Linux】CentOS网络故障排查大揭秘: 实战攻略解读
【Linux】CentOS网络故障排查大揭秘: 实战攻略解读