本章介绍:

  • 主要以对于Halo的需求使用的方法记录

  • 优化Halo资源的方法

  • 美化Halo资源的方法

配置环境:

  • 群辉

  • Docker

  • phpMyAdmin

  • MySQL


一、图片批量压缩、添加水印和修改数据库

1、使用SSH命令

  1. 进入root目录,然后转入00_bash文件夹下

#转到root根账号 获得root权限
sudo -i
#转到sh批处理文件夹目录下
#(1)1Panel
cd /opt/1panel/apps/halo/halo/data/attachments/upload/00_bash
  1. 批量处理图片内容的压缩和转换为.avif

#先让批处理文件获得权限
chmod +x 02_transition.sh
#使用批处理文件工作(注意文件夹路径是否正确)
./02_transition.sh
  1. 批量处理图片水印

#先让批处理文件获得权限
chmod +x 01_add_watermark.sh
#使用批处理文件工作(注意文件夹路径是否正确)
./01_add_watermark.sh
  1. 修正、优化批量处理方法

#先让批处理文件获得权限
chmod +x 03_xgys.sh
#使用批处理文件工作(注意文件夹路径是否正确)
./03_xgys.sh

1、批量压缩图片并转换为avif(更新优化中文提示功能)

  1. 给服务器安装ImageMagick,(可以参考以下内容)

    https://maoxiang.site/archives/xnview-mp-imagemagicktu-xiang-chu-li-gong-ju

  2. 使用sh批处理进行处理(批量压缩图片并转换为avif格式的脚本)

#!/bin/bash

# 定义变量
input_dir="/opt/1panel/apps/halo/halo/data/attachments/upload/TTT/POST"  # 图片文件夹路径
output_dir="/opt/1panel/apps/halo/halo/data/attachments/upload/Blog/posts/$(date +%Y-%-m)"  # 输出文件夹路径

# 创建输出文件夹(如果不存在)
mkdir -p "$output_dir"

echo "开始图片处理..."
echo "输入目录: $input_dir"
echo "输出目录: $output_dir"

# 支持的图片格式
supported_extensions=("jpg" "jpeg" "png" "gif")

# 遍历图片文件夹中的所有图片
for ext in "${supported_extensions[@]}"; do
    for image in "$input_dir"/*."$ext"; do
        # 检查图片是否存在
        if [[ ! -f "$image" ]]; then
            continue
        fi

        # 获取文件名(不含路径和扩展名)
        filename=$(basename "$image")
        name_no_ext="${filename%.*}"

        # 获取转换前的图片大小(字节)
        original_size=$(stat -c%s "$image")

        echo "正在处理: $filename (原始大小: $original_size 字节)"

        # 转换为 AVIF 格式,质量压缩到 80%
        if convert "$image" -quality 80% "$output_dir/$name_no_ext.avif"; then
            # 获取转换后的图片大小(字节)
            converted_size=$(stat -c%s "$output_dir/$name_no_ext.avif")
            
            # 计算减少的百分比
            reduction=$(echo "scale=2; 100 - ($converted_size / $original_size * 100)" | bc)

            # 删除原始图片
            rm "$image"
            
            echo "处理成功: $filename -> $name_no_ext.avif"
            echo "原始大小: $original_size 字节, 压缩后大小: $converted_size 字节, 体积减少: ${reduction}%"
        else
            echo "处理失败: $filename"
        fi
    done
done

echo "所有图片处理完成"

2、批量添加水印(更新优化中文提示和检测功能)

#!/bin/bash

# 定义变量
input_dir="/opt/1panel/apps/halo/halo/data/attachments/upload/Blog/posts/2025-4"  # 图片文件夹路径
watermark="/opt/1panel/apps/halo/halo/data/attachments/upload/00_bash/watermark/watermark.png" # 水印图片路径
base_width=1920  # 基准宽度
watermark_base_size=200  # 基准水印大小
base_margin=10  # 基准间距(距离边缘的间距)

# 检查水印图片是否存在
if [[ ! -f "$watermark" ]]; then
    echo "错误: 水印图片未找到,路径: $watermark"
    exit 1
fi

# 遍历图片文件夹中的所有图片
for image in "$input_dir"/*.{jpg,jpeg,png,gif,avif}; do
    # 跳过不匹配的文件
    [ -e "$image" ] || continue
    
    # 获取文件名(不含路径)
    filename=$(basename "$image")
    
    # 获取图片宽度
    image_width=$(identify -format "%w" "$image")
    
    # 计算水印缩放比例
    scale=$(echo "scale=2; $image_width / $base_width" | bc)
    
    # 计算水印大小
    watermark_size=$(echo "$watermark_base_size * $scale" | bc | awk '{print int($1)}')
    
    # 计算动态间距
    margin=$(echo "$base_margin * $scale" | bc | awk '{print int($1)}')
    
    # 调整水印大小
    watermark_resized="/tmp/resized_watermark.png"
    convert "$watermark" -resize "${watermark_size}x" "$watermark_resized"
    
    # 添加水印到图片右下角,并保存为临时文件
    temp_image="/tmp/temp_$filename"
    composite -gravity southeast -geometry +${margin}+${margin} "$watermark_resized" "$image" "$temp_image"
    
    # 用处理后的图片替换原始图片
    mv "$temp_image" "$image"
    
    echo "已处理并替换: $filename (图片宽度: $image_width, 水印大小: ${watermark_size}x, 边距: ${margin}px)"
done

# 清理临时文件
rm -f /tmp/resized_watermark.png /tmp/temp_*

echo "所有图片已处理完成。"

3、数据库内容修改方案

  1. 简单的替换查询内容使用phpMyAdmin即可完成

  1. 使用SQL语句实现(phpMyAdmin或者Chat2DB都能实现)

# 实现思路,先查询/upload/TTT/POST/相关内容,然后再二级查询并替换/upload/TTT/POST/和.png
UPDATE extensions
SET data = REPLACE(
    REPLACE(
        data, 
        '/upload/TTT/POST/', 
        '/upload/Blog/posts/2025-3/'
    ),
    '.png',
    '.avif'
)
WHERE data LIKE '%/upload/TTT/POST/%';  -- 仅修改包含 /upload/TTT/POST/ 的记录