• 搜索
  • 夜间模式
    ©2026  王较瘦?【Since 2006】 Theme by OneBlog
    搜索
    标签
    # 生活碎片/灵感时刻 # 瞎折腾/主题制作 # 生活碎片/摄影生活 # 生活碎片/游山玩水 # 贵阳市 # 生活碎片/游戏 # 重庆市 # 三亚 # 成都市 # 崇左市
  • 首页>
  • 日志>
  • 正文
  • 缩略图优化

    2025年02月12日 93 阅读 0 评论 3862 字

    最终我还是把缩略图加上,原本改了图片布局后又删掉了缩略图相关代码,但几天运行下来感觉加载原图还是不行,肉眼可见的慢……

    经过深思熟虑还是加上缩略图吧,在运行看看效果,以前的缩略图都是固定宽高的,也就是常见的四四方方的小格子图片,这次改进了一下,毕竟布局是等高不等宽嘛,全都缩成比如 300*300 的也不行,横向的图会变得模胡。关于缩略图一直找不到最优的方案,缩放和裁剪都试过,当然不是不行,而是受技术所限吧。#瞎折腾/主题制作

    后来在枫叶那看到关于腾讯云oss规则的文章,给我很大启发,脑海里分析后感觉能做出来。

    巧用阿里云oss图片规则-link


    由于我没有oss当图床,也不想用第三方储存图片,决定在现有的基础上改造,首先要解决灯箱问题,我没用第三方插件,也不想增加a标签来包裹img,那么src为缩略图时原图地址怎么办,取了个巧,在img标签中增加一个s放原图地址。

    通常缩略图都是放在另一个文件夹,这样一来就需要改动js增加几行,为了精简代码,这里就用到了腾讯云oss的规则将缩略图和原图放在一起,缩略图名称与原图一致,在缩略图后缀加!i来区分,如jpg!i。

    发现浏览器将.jpg!i识别为文件,虽然用img包裹住能显示,但直接输入地址就成了文件被下载到本地,不妥,查看枫叶的就不存在此问题,慒圈了不明白什么原理,也没人可以问,百度一番后大概猜到原因,怀疑是MIME类型.

    试着修改看看,宝塔面板路径:www/server/nginx/conf/mime.types增加需要的种类后保存并重启nginx,刷新见证奇迹的时刻……


    此时在看浏览器已将他识别为图片类型,这种形式还是头一次见,感觉好没见识呀,当我看到!i是缩略图不要则是原图时惊掉了下巴,咋实现的?经过努力终于弄明白原理?,或许这就是折腾的意义吧,虽然我不一定能记住,但始终是学到了,即使忘记当我在看到时还是有印像的。

    [details 存量无缩略图,写个脚本生成就好了!]

    
    <?php 
    // 指定要遍历的目录
    $directory = '12/';
    if (!is_dir($directory)) {
        die("指定的目录不存在。");
    }
    $dir = opendir($directory);
    while (($file = readdir($dir)) !== false) {
        if ($file == '.' || $file == '..') {
            continue;
        }
        if (strpos($file, '!i')!== false) {
            continue;
        }
        $filePath = $directory . '/' . $file;
        if (is_file($filePath)) {
            $info = pathinfo($file);
            $fileName = $info['filename'];
            $extension = $info['extension'];
            $thumbnailFileName = $fileName . '.' . $extension . '!i';
            $thumbnailFilePath = $directory . '/' . $thumbnailFileName;
            if (!file_exists($thumbnailFilePath)) {
                generateThumbnail($filePath, $thumbnailFilePath);
            }
        }
    }
    closedir($dir);
    
    function generateThumbnail($sourceFilePath, $thumbnailFilePath) {
        try {
            $image = new Imagick($sourceFilePath);
            $orientation = $image->getImageOrientation();
            switch ($orientation) {
                case Imagick::ORIENTATION_TOPLEFT:
                    break;
                case Imagick::ORIENTATION_TOPRIGHT:
                    $image->flopImage();
                    break;
                case Imagick::ORIENTATION_BOTTOMRIGHT:
                    $image->rotateImage(new ImagickPixel(), 180);
                    break;
                case Imagick::ORIENTATION_BOTTOMLEFT:
                    $image->flopImage();
                    $image->rotateImage(new ImagickPixel(), 180);
                    break;
                case Imagick::ORIENTATION_LEFTTOP:
                    $image->flopImage();
                    $image->rotateImage(new ImagickPixel(), -90);
                    break;
                case Imagick::ORIENTATION_RIGHTTOP:
                    $image->rotateImage(new ImagickPixel(), 90);
                    break;
                case Imagick::ORIENTATION_RIGHTBOTTOM:
                    $image->flopImage();
                    $image->rotateImage(new ImagickPixel(), 90);
                    break;
                case Imagick::ORIENTATION_LEFTBOTTOM:
                    $image->rotateImage(new ImagickPixel(), -90);
                    break;
            }
            $image->setImageOrientation(Imagick::ORIENTATION_TOPLEFT);
            $width = $image->getImageWidth();
            $height = $image->getImageHeight();
            $maxWidth = 640;
            if ($width > $maxWidth) {
                // 根据原始宽高比计算新的高度
                $newHeight = ($maxWidth / $width) * $height;
                $image->thumbnailImage($maxWidth, $newHeight);
            }
            $image->writeImage($thumbnailFilePath);
            $image->destroy();
        } catch (ImagickException $e) {
            error_log("生成缩略图时出错: " . $e->getMessage());
        }
    }
    

    [/details]

    本文著作权归作者 [ 王叔书 ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    瞎折腾/主题制作
    — END —
    Copyright©2026  All Rights Reserved.  Load:0.012 s
    Theme by OneBlog V3.6.4
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。