Waifu2x+PHP实现自动批量放大图片

waifu2x,著名的二次元图片壁纸放大降噪神器
之前介绍过(传送门),就不赘述了

那这次我要搞什么玩意儿呢?
众所周知,我有一个壁纸包,每隔十分钟就会随机选择一张作为我的电脑壁纸
这个壁纸包伴随了我3年有余,有一些早期收集的壁纸分辨率连1080P都不到。挨个儿手动挑出来丢waifu2x放大一波?工程太大太麻烦;整个文件夹丢waifu2x?太费时不说,有些图片可能格式比较特殊,会导致 waifu2x-caffe 报错崩溃

那么,有没有什么办法,既可以按需放大、又能断点续处理、还不会因为少部分特殊图片报错导致整体进度被卡住呢?
当——然——有——啦!

<?php

// waifu2x-caffe-cui.exe 完整路径
$waifu2x = 'E:/Program Files/waifu2x-caffe/waifu2x-caffe-cui.exe';
// 原图所在路径
$input = 'E:/OneDrive/图片/高清壁纸/';
// 处理后图片存放路径
$output = 'E:/waifu2x/';

// 以下内容请勿随意修改
$fileList = scandir($input);
foreach ($fileList as $file) {
    // 方便断点续处理
    if (!file_exists($output . $file)) {
        $imageInfo = getimagesize("{$input}{$file}");
        if ($imageInfo) {
            // 图片宽度低于 2000 像素时才处理
            if ($imageInfo[0] < 2000) {
                echo "{$file}...\n";
                $shell = "\"{$waifu2x}\" -i \"{$input}{$file}\" -o \"{$output}{$file}\" -m noise_scale --scale_ratio 1.5 --noise_level 2";
                exec($shell);
            }
        } else {
            echo "【文件异常】 {$file}\n";
            var_dump($imageInfo);
        }
    }
}

echo "\nAll Done.\n";

以上内容保存为任意文件名,然后在命令行下用 php [任意文件名].php 执行并等待完毕即可
其中,前三个变量需要根据你本地的实际情况修改为对应的路径
$shell 变量为命令内容,其中 --scale_ratio 表示放大倍数;--noise_level 表示降噪级别
其他更多参数及具体含义可以看官方文档的介绍

17 条评论

点击这里取消回复。

昵称
  1. 博主你这个配图很和主题啊,是不是在暗示什么,O(∩_∩)O哈哈~