这几天把我博客的上传资源的功能重新搞了下,主要搞了两个方面,图片压缩用了spatie/image-optimizer库它主要集成了jpegoptim,optipng,pngquant,svgo,gifsicle比较方便,以及视频生成一个gif的预览图,用了ffmpeg,
小提示
图片压缩都在Linux系统下才能测试(因为我没有找到window环境的包啊),ffmpeg可以在window测试(这个就找到了), 呜呜~~
先放下相关的链接:
安装环境
安装压缩图片(Linux系统)
$ sudo apt-get install jpegoptim
$ sudo apt-get install optipng
$ sudo apt-get install pngquant
$ sudo npm install -g svgo //要有node环境啊,可以下个nvm来安装
$ sudo apt-get install gifsicle
安装ffmpeg
Linux系统
$ sudo add-apt-repository ppa:djcj/hybrid
$ sudo apt-get update
$ sudo apt-get install ffmpeg
Window系统
1.下载相应的版本下载页面链接
2. 把压缩包解压,并且重命名为ffmpeg
(主要是为了方便),然后放到一个地方,我这里放到D:\ffmpeg
下面,这个路径要记住了啊
3. 添加系统环境变量,在path
里追加一个值 D:\ffmpeg\bin
这里改成你们相应的路径啊,然后打开一个cmd窗口,运行echo PATH=C之后关闭窗口,在重新打开一个cmd窗口,这样子就不用重启电脑就可以刷新环境变量了,不会添加环境变量的请click me!
我们来测试下有没有安装成功
$ jpegoptim -V
$ optipng -v
$ pngquant -V
$ svgo -v
$ gifsicle --version
$ ffmpeg -versioin
以上的命令如果都能打印出对应的版本信息的话,那就说明安装成功了,恭喜你,离成功越来越近了,嘿嘿
压缩图片使用
在项目根目录运行下面的命令
$ composer require spatie/laravel-image-optimizer //下载包
$ php artisan vendor:publish --provider="Spatie\LaravelImageOptimizer\ImageOptimizerServiceProvider" //生成配置文件在config/image-optimizer
然后是在你上传的方法里面添加下面代码:
//在文件头部添加这个行代码
use ImageOptimizer;
//在压缩图片的方法中添加这行代码
//这个是覆盖源文件的
ImageOptimizer::optimize($pathToPath);
//这是输出到另外一个文件的,不会覆盖源文件
ImageOptimizer::optimize($pathToPath, $pathOutPath);
//上面两句代码任选一种
这么简单么? 就是这么的简单,如果你想要修改压缩的配置,可以去config/image-optimizer
里面去搞,相应的说明都有注释了,虽然是英文的不懂的就google翻译吧,嘿嘿
ffmpeg的使用
这里我想说下本来它是有
composer require "php-ffmpeg/php-ffmpeg"
laravel包的,而且他的api我看了下也非常的简单,但是我搞了很久都没有搞出来,打开视频的时候一直报502 bad gateway
的错误,所以最后只能用exec()
函数来搞了,如果你们有整出来的欢迎评论区说下,感激不尽!!!
这里说下用exec
函数,首先要把exec
从php.ini
的disable_functions
里面去掉,不然会报错,记得重新启动下php啊,然后你的方法里面添加下面的代码就ok了
// 参数10是代表视频的前面10帧,这个数值越大,生成的图片就会越大,看着来设置吧
exec("ffmpeg -i video.mp4 -vframes 10 -y -f gif thumb.gif"); //路径一定要替换成对应的啊
然后,就没有然后了~~~~