commit
6c8104ca2c
9
.editorconfig
Normal file
9
.editorconfig
Normal file
|
@ -0,0 +1,9 @@
|
|||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = false
|
39
.gitattributes
vendored
Normal file
39
.gitattributes
vendored
Normal file
|
@ -0,0 +1,39 @@
|
|||
# Auto detect text files and perform LF normalization
|
||||
* text=auto
|
||||
|
||||
# Documents
|
||||
*.md text eol=lf
|
||||
*.tex text diff=tex
|
||||
*.adoc text
|
||||
*.textile text
|
||||
*.mustache text eol=lf
|
||||
*.csv text
|
||||
*.tab text
|
||||
*.tsv text
|
||||
*.txt text
|
||||
*.sql text
|
||||
|
||||
# Scripts
|
||||
*.bash text eol=lf
|
||||
*.fish text eol=lf
|
||||
*.sh text eol=lf
|
||||
|
||||
# Source files
|
||||
# ============
|
||||
*.pxd text diff=python
|
||||
*.py text diff=python
|
||||
*.py3 text diff=python
|
||||
*.pyc text diff=python
|
||||
*.pyd text diff=python
|
||||
*.pyo text diff=python
|
||||
*.pyw text diff=python
|
||||
*.pyx text diff=python
|
||||
*.pyz text diff=python
|
||||
|
||||
|
||||
#
|
||||
# Exclude files from exporting
|
||||
#
|
||||
|
||||
.gitattributes export-ignore
|
||||
.gitignore export-ignore
|
49
.github/workflows/main.yml
vendored
Normal file
49
.github/workflows/main.yml
vendored
Normal file
|
@ -0,0 +1,49 @@
|
|||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
- master
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
release:
|
||||
types: [published]
|
||||
schedule:
|
||||
- cron: '0 0 * * 0'
|
||||
|
||||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||
jobs:
|
||||
# This workflow contains a single job called "build"
|
||||
build:
|
||||
# The type of runner that the job will run on
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||
steps:
|
||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
# Runs a set of commands using the runners shell
|
||||
- name: Install prerequesites
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install jpegoptim -y
|
||||
sudo -E time bash scripts/install-webp.sh > /dev/null 2>&1
|
||||
sudo -E time bash scripts/install-optipng.sh > /dev/null 2>&1
|
||||
sudo wget -qO /usr/local/bin/avif https://github.com/Kagami/go-avif/releases/download/v0.1.0/avif-linux-x64
|
||||
sudo chmod +x /usr/local/bin/avif
|
||||
sudo cp optimize.sh /usr/local/bin/img-optimize
|
||||
sudo chmod 755 /usr/local/bin/img-optimize
|
||||
|
||||
- name: Optimize Images
|
||||
run: |
|
||||
ls -alh images/
|
||||
/usr/local/bin/img-optimize --avif
|
||||
ls -alh images/
|
||||
/usr/local/bin/img-optimize --webp
|
||||
ls -alh images/
|
||||
rm -f images/*.webp images/*.avif
|
||||
/usr/local/bin/img-optimize --all
|
||||
ls -alh images/
|
18
.travis.yml
18
.travis.yml
|
@ -1,7 +1,7 @@
|
|||
sudo: required
|
||||
os: linux
|
||||
dist: bionic
|
||||
|
||||
language: bash
|
||||
language: shell
|
||||
|
||||
cache:
|
||||
apt: true
|
||||
|
@ -10,6 +10,7 @@ git:
|
|||
quiet: true
|
||||
|
||||
before_script:
|
||||
- sudo apt-get install tree -y
|
||||
- sudo apt-get -qq autoremove --purge
|
||||
addons:
|
||||
apt:
|
||||
|
@ -17,14 +18,19 @@ addons:
|
|||
|
||||
script:
|
||||
- sudo apt-get install jpegoptim -y
|
||||
- sudo bash scripts/install-webp.sh
|
||||
- sudo bash scripts/install-optipng.sh
|
||||
- sudo -E time bash scripts/install-webp.sh > /dev/null 2>&1
|
||||
- sudo -E time bash scripts/install-optipng.sh > /dev/null 2>&1
|
||||
- sudo wget -qO /usr/local/bin/avif https://github.com/Kagami/go-avif/releases/download/v0.1.0/avif-linux-x64
|
||||
- sudo chmod +x /usr/local/bin/avif
|
||||
- sudo cp optimize.sh /usr/local/bin/img-optimize
|
||||
- sudo chmod 755 /usr/local/bin/img-optimize
|
||||
- /usr/local/bin/img-optimize --all
|
||||
- /usr/local/bin/img-optimize -jpg -q
|
||||
- ls -alh images/
|
||||
- /usr/local/bin/img-optimize --all -q
|
||||
- ls -alh images/
|
||||
- /usr/local/bin/img-optimize --jpg -q
|
||||
- /usr/local/bin/img-optimize --png -q
|
||||
- rm images/*.webp
|
||||
- /usr/local/bin/img-optimize --webp
|
||||
- tree -L 2 .
|
||||
- rm images/*.webp
|
||||
- /usr/local/bin/img-optimize --webp --quiet
|
|
@ -6,14 +6,21 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|||
|
||||
## [Unreleased]
|
||||
|
||||
## [V2.0] - 2020-11-10
|
||||
|
||||
### Added
|
||||
|
||||
- quiet mode
|
||||
- option --no-run-if-empty added to xargs
|
||||
- scripts to compile optipng & libwebp from source
|
||||
- Avif (AV1 Image Format) support
|
||||
- Avoid optimizing the same image at the same moment [PR #12](https://github.com/VirtuBox/img-optimize/pull/12)
|
||||
|
||||
### Changed
|
||||
|
||||
- JPG are optimized as progressive JPG
|
||||
- WebP and Avif newly created images are deleted in case of failure during conversion
|
||||
|
||||
## [V1.1] - 2019-04-05
|
||||
|
||||
### Added
|
||||
|
|
253
README.md
253
README.md
|
@ -1,120 +1,133 @@
|
|||
# Image optimization bash script
|
||||
|
||||

|
||||
|
||||
[](https://travis-ci.org/VirtuBox/img-optimize)    
|
||||
|
||||
## Prerequisite
|
||||
|
||||
- jpegoptim for jpg optimization
|
||||
- optipng for png optimization
|
||||
- cwebp for WebP conversion
|
||||
|
||||
### From APT repositories
|
||||
|
||||
Debian/Ubuntu :
|
||||
|
||||
```bash
|
||||
sudo apt install jpegoptim optipng webp -y
|
||||
```
|
||||
|
||||
Centos 7 :
|
||||
|
||||
```bash
|
||||
sudo yum install optipng jpegoptim libwebp-tools -y
|
||||
```
|
||||
|
||||
### Compile the latest release (optipng & libwebp)
|
||||
|
||||
For Debian/Ubuntu (available in scripts folder) :
|
||||
|
||||
```bash
|
||||
# optipng
|
||||
curl -sL git.io/fjddn | sudo -E bash
|
||||
|
||||
# libwebp
|
||||
curl -sL git.io/fjdd6 | sudo -E bash
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
## Installation
|
||||
|
||||
1) Clone the repository
|
||||
|
||||
```bash
|
||||
git clone https://github.com/VirtuBox/img-optimize.git $HOME/.img-optimize
|
||||
```
|
||||
|
||||
2) Install the script
|
||||
|
||||
**Method 1** : Add an alias in .bashrc
|
||||
|
||||
With this method img-optimize can only be used by the current user
|
||||
|
||||
```bash
|
||||
echo "alias img-optimize=$HOME/.img-optimize/optimize.sh" >> $HOME/.bashrc
|
||||
source $HOME/.bashrc
|
||||
```
|
||||
|
||||
**Method 2** : Add an alias to the script in /usr/local/bin
|
||||
|
||||
With this method img-optimize can be used by all users
|
||||
|
||||
```bash
|
||||
sudo ln -s $HOME/.img-optimize/optimize.sh /usr/local/bin/img-optimize
|
||||
sudo chmod +x /usr/local/bin/img-optimize
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
Bash script to optimize your images and convert them in WebP
|
||||
Usage: img-optimize [options] <images path>
|
||||
If images path isn't defined, img-optimize will use the current directory
|
||||
Options:
|
||||
--jpg <images path> ..... optimize all jpg images
|
||||
--png <images path> ..... optimize all png images
|
||||
--webp <images path> ..... convert all images in webp
|
||||
--nowebp <images path> ..... optimize all png & jpg images
|
||||
--all <images path> ..... optimize all images (png + jpg + webp)
|
||||
-i, --interactive ..... run img-optimize in interactive mode
|
||||
-q, --quiet ..... run image optimization quietly
|
||||
Other options :
|
||||
-h, --help, help ... displays this help information
|
||||
Examples:
|
||||
optimize all jpg images in /var/www/images
|
||||
img-optimize --jpg /var/www/images
|
||||
```
|
||||
|
||||
## Update the script
|
||||
|
||||
To update the script, just run :
|
||||
|
||||
```bash
|
||||
git -C $HOME/.img-optimize pull
|
||||
```
|
||||
|
||||
## Setup daily cronjob
|
||||
|
||||
You just have to copy the scripts to /etc/cron.daily :
|
||||
|
||||
```bash
|
||||
cp $HOME/.img-optimize/crons/jpg-png-cron.sh /etc/cron.daily/jpg-png-cron
|
||||
cp $HOME/.img-optimize/crons/jpg-png-cron.sh /etc/cron.daily/webp-cron
|
||||
|
||||
chmod +x /etc/cron.daily/jpg-png-cron
|
||||
chmod +x /etc/cron.daily/webp-cron
|
||||
```
|
||||
|
||||
Then just edit your websites path set with the variables `sites` at the beginning of the cron scripts.
|
||||
|
||||
## Warning
|
||||
|
||||
Conversion process can take a while, you can use `tmux` to launch the script and be able to close your ssh connection without interrupting conversion. Then just use `tmux attach` to login back in your tmux session.
|
||||
|
||||
## Credits
|
||||
|
||||
- WebP conversion script was inspired by this [DigitalOcean Community Tutorial](https://www.digitalocean.com/community/tutorials/how-to-create-and-serve-webp-images-to-speed-up-your-website)
|
||||
|
||||
- Tutorial about webp conversion available on [jesuisadmin.fr](https://jesuisadmin.fr/convertir-vos-images-en-webp-nginx/) (in french)
|
||||
# Image optimization bash script
|
||||
|
||||

|
||||
|
||||
[](https://travis-ci.org/VirtuBox/img-optimize)    
|
||||
|
||||
## Prerequisite
|
||||
|
||||
- jpegoptim for jpg optimization
|
||||
- optipng for png optimization
|
||||
- cwebp for WebP conversion
|
||||
- go-avif for Avif conversion
|
||||
|
||||
### From APT repositories
|
||||
|
||||
Debian/Ubuntu :
|
||||
|
||||
```bash
|
||||
sudo apt install jpegoptim optipng webp -y
|
||||
```
|
||||
|
||||
Centos 7 :
|
||||
|
||||
```bash
|
||||
sudo yum install optipng jpegoptim libwebp-tools -y
|
||||
```
|
||||
|
||||
### Compile the latest release (optipng & libwebp)
|
||||
|
||||
For Debian/Ubuntu (available in scripts folder) :
|
||||
|
||||
```bash
|
||||
# optipng
|
||||
curl -sL git.io/fjddn | sudo -E bash
|
||||
|
||||
# libwebp
|
||||
curl -sL git.io/fjdd6 | sudo -E bash
|
||||
```
|
||||
|
||||
### Go-Avif installation
|
||||
|
||||
```bash
|
||||
sudo wget -qO /usr/local/bin/avif https://github.com/Kagami/go-avif/releases/download/v0.1.0/avif-linux-x64
|
||||
sudo chmod +x /usr/local/bin/avif
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
## Installation
|
||||
|
||||
1) Clone the repository
|
||||
|
||||
```bash
|
||||
git clone https://github.com/VirtuBox/img-optimize.git $HOME/.img-optimize
|
||||
```
|
||||
|
||||
2) Install the script
|
||||
|
||||
**Method 1** : Add an alias in .bashrc
|
||||
|
||||
With this method img-optimize can only be used by the current user
|
||||
|
||||
```bash
|
||||
echo "alias img-optimize=$HOME/.img-optimize/optimize.sh" >> $HOME/.bashrc
|
||||
source $HOME/.bashrc
|
||||
```
|
||||
|
||||
**Method 2** : Add an alias to the script in /usr/local/bin
|
||||
|
||||
With this method img-optimize can be used by all users
|
||||
|
||||
```bash
|
||||
sudo ln -s $HOME/.img-optimize/optimize.sh /usr/local/bin/img-optimize
|
||||
sudo chmod +x /usr/local/bin/img-optimize
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
Bash script to optimize your images and convert them in WebP
|
||||
Usage: img-optimize [options] <images path>
|
||||
If images path isn't defined, img-optimize will use the current directory
|
||||
Options:
|
||||
--jpg ..... optimize all jpg images
|
||||
--png ..... optimize all png images
|
||||
--webp ..... convert all images in webp
|
||||
--avif ..... convert all images in avif
|
||||
--std ..... optimize all png & jpg images
|
||||
--next ..... convert all images in webp & avif
|
||||
--all ..... optimize all images (png + jpg + webp + avif)
|
||||
-i, --interactive ..... run img-optimize in interactive mode
|
||||
-q, --quiet ..... run image optimization quietly
|
||||
--path <images path> ..... define images path
|
||||
Other options :
|
||||
-h, --help, help ... displays this help information
|
||||
--cmin [+|-]<n> ... File's status was last changed n minutes ago.
|
||||
act find cmin argument (+n : greater than n, -n : less than n, n : exactly n)
|
||||
Examples:
|
||||
optimize all jpg images in /var/www/images
|
||||
img-optimize --jpg --path /var/www/images
|
||||
```
|
||||
|
||||
### Update the script
|
||||
|
||||
To update the script, just run :
|
||||
|
||||
```bash
|
||||
git -C $HOME/.img-optimize pull
|
||||
```
|
||||
|
||||
### Setup daily cronjob
|
||||
|
||||
You just have to copy the scripts to /etc/cron.daily :
|
||||
|
||||
```bash
|
||||
cp $HOME/.img-optimize/crons/jpg-png-cron.sh /etc/cron.daily/jpg-png-cron
|
||||
cp $HOME/.img-optimize/crons/jpg-png-cron.sh /etc/cron.daily/webp-cron
|
||||
|
||||
chmod +x /etc/cron.daily/jpg-png-cron
|
||||
chmod +x /etc/cron.daily/webp-cron
|
||||
```
|
||||
|
||||
Then just edit your websites path set with the variables `sites` at the beginning of the cron scripts.
|
||||
|
||||
## Warning
|
||||
|
||||
Conversion process can take a while, you can use `tmux` to launch the script and be able to close your ssh connection without interrupting conversion. Then just use `tmux attach` to login back in your tmux session.
|
||||
|
||||
## Credits
|
||||
|
||||
- WebP conversion script was inspired by this [DigitalOcean Community Tutorial](https://www.digitalocean.com/community/tutorials/how-to-create-and-serve-webp-images-to-speed-up-your-website)
|
||||
|
||||
- Tutorial about webp conversion available on [jesuisadmin.fr](https://jesuisadmin.fr/convertir-vos-images-en-webp-nginx/) (in french)
|
||||
|
|
253
docs/README.md
253
docs/README.md
|
@ -1,120 +1,133 @@
|
|||
# Image optimization bash script
|
||||
|
||||

|
||||
|
||||
[](https://travis-ci.org/VirtuBox/img-optimize)    
|
||||
|
||||
## Prerequisite
|
||||
|
||||
- jpegoptim for jpg optimization
|
||||
- optipng for png optimization
|
||||
- cwebp for WebP conversion
|
||||
|
||||
### From APT repositories
|
||||
|
||||
Debian/Ubuntu :
|
||||
|
||||
```bash
|
||||
sudo apt install jpegoptim optipng webp -y
|
||||
```
|
||||
|
||||
Centos 7 :
|
||||
|
||||
```bash
|
||||
sudo yum install optipng jpegoptim libwebp-tools -y
|
||||
```
|
||||
|
||||
### Compile the latest release (optipng & libwebp)
|
||||
|
||||
For Debian/Ubuntu (available in scripts folder) :
|
||||
|
||||
```bash
|
||||
# optipng
|
||||
curl -sL git.io/fjddn | sudo -E bash
|
||||
|
||||
# libwebp
|
||||
curl -sL git.io/fjdd6 | sudo -E bash
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
## Installation
|
||||
|
||||
1) Clone the repository
|
||||
|
||||
```bash
|
||||
git clone https://github.com/VirtuBox/img-optimize.git $HOME/.img-optimize
|
||||
```
|
||||
|
||||
2) Install the script
|
||||
|
||||
**Method 1** : Add an alias in .bashrc
|
||||
|
||||
With this method img-optimize can only be used by the current user
|
||||
|
||||
```bash
|
||||
echo "alias img-optimize=$HOME/.img-optimize/optimize.sh" >> $HOME/.bashrc
|
||||
source $HOME/.bashrc
|
||||
```
|
||||
|
||||
**Method 2** : Add an alias to the script in /usr/local/bin
|
||||
|
||||
With this method img-optimize can be used by all users
|
||||
|
||||
```bash
|
||||
sudo ln -s $HOME/.img-optimize/optimize.sh /usr/local/bin/img-optimize
|
||||
sudo chmod +x /usr/local/bin/img-optimize
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
Bash script to optimize your images and convert them in WebP
|
||||
Usage: img-optimize [options] <images path>
|
||||
If images path isn't defined, img-optimize will use the current directory
|
||||
Options:
|
||||
--jpg <images path> ..... optimize all jpg images
|
||||
--png <images path> ..... optimize all png images
|
||||
--webp <images path> ..... convert all images in webp
|
||||
--nowebp <images path> ..... optimize all png & jpg images
|
||||
--all <images path> ..... optimize all images (png + jpg + webp)
|
||||
-i, --interactive ..... run img-optimize in interactive mode
|
||||
-q, --quiet ..... run image optimization quietly
|
||||
Other options :
|
||||
-h, --help, help ... displays this help information
|
||||
Examples:
|
||||
optimize all jpg images in /var/www/images
|
||||
img-optimize --jpg /var/www/images
|
||||
```
|
||||
|
||||
## Update the script
|
||||
|
||||
To update the script, just run :
|
||||
|
||||
```bash
|
||||
git -C $HOME/.img-optimize pull
|
||||
```
|
||||
|
||||
## Setup daily cronjob
|
||||
|
||||
You just have to copy the scripts to /etc/cron.daily :
|
||||
|
||||
```bash
|
||||
cp $HOME/.img-optimize/crons/jpg-png-cron.sh /etc/cron.daily/jpg-png-cron
|
||||
cp $HOME/.img-optimize/crons/jpg-png-cron.sh /etc/cron.daily/webp-cron
|
||||
|
||||
chmod +x /etc/cron.daily/jpg-png-cron
|
||||
chmod +x /etc/cron.daily/webp-cron
|
||||
```
|
||||
|
||||
Then just edit your websites path set with the variables `sites` at the beginning of the cron scripts.
|
||||
|
||||
## Warning
|
||||
|
||||
Conversion process can take a while, you can use `tmux` to launch the script and be able to close your ssh connection without interrupting conversion. Then just use `tmux attach` to login back in your tmux session.
|
||||
|
||||
## Credits
|
||||
|
||||
- WebP conversion script was inspired by this [DigitalOcean Community Tutorial](https://www.digitalocean.com/community/tutorials/how-to-create-and-serve-webp-images-to-speed-up-your-website)
|
||||
|
||||
- Tutorial about webp conversion available on [jesuisadmin.fr](https://jesuisadmin.fr/convertir-vos-images-en-webp-nginx/) (in french)
|
||||
# Image optimization bash script
|
||||
|
||||

|
||||
|
||||
[](https://travis-ci.org/VirtuBox/img-optimize)    
|
||||
|
||||
## Prerequisite
|
||||
|
||||
- jpegoptim for jpg optimization
|
||||
- optipng for png optimization
|
||||
- cwebp for WebP conversion
|
||||
- go-avif for Avif conversion
|
||||
|
||||
### From APT repositories
|
||||
|
||||
Debian/Ubuntu :
|
||||
|
||||
```bash
|
||||
sudo apt install jpegoptim optipng webp -y
|
||||
```
|
||||
|
||||
Centos 7 :
|
||||
|
||||
```bash
|
||||
sudo yum install optipng jpegoptim libwebp-tools -y
|
||||
```
|
||||
|
||||
### Compile the latest release (optipng & libwebp)
|
||||
|
||||
For Debian/Ubuntu (available in scripts folder) :
|
||||
|
||||
```bash
|
||||
# optipng
|
||||
curl -sL git.io/fjddn | sudo -E bash
|
||||
|
||||
# libwebp
|
||||
curl -sL git.io/fjdd6 | sudo -E bash
|
||||
```
|
||||
|
||||
### Go-Avif installation
|
||||
|
||||
```bash
|
||||
sudo wget -qO /usr/local/bin/avif https://github.com/Kagami/go-avif/releases/download/v0.1.0/avif-linux-x64
|
||||
sudo chmod +x /usr/local/bin/avif
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
## Installation
|
||||
|
||||
1) Clone the repository
|
||||
|
||||
```bash
|
||||
git clone https://github.com/VirtuBox/img-optimize.git $HOME/.img-optimize
|
||||
```
|
||||
|
||||
2) Install the script
|
||||
|
||||
**Method 1** : Add an alias in .bashrc
|
||||
|
||||
With this method img-optimize can only be used by the current user
|
||||
|
||||
```bash
|
||||
echo "alias img-optimize=$HOME/.img-optimize/optimize.sh" >> $HOME/.bashrc
|
||||
source $HOME/.bashrc
|
||||
```
|
||||
|
||||
**Method 2** : Add an alias to the script in /usr/local/bin
|
||||
|
||||
With this method img-optimize can be used by all users
|
||||
|
||||
```bash
|
||||
sudo ln -s $HOME/.img-optimize/optimize.sh /usr/local/bin/img-optimize
|
||||
sudo chmod +x /usr/local/bin/img-optimize
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
Bash script to optimize your images and convert them in WebP
|
||||
Usage: img-optimize [options] <images path>
|
||||
If images path isn't defined, img-optimize will use the current directory
|
||||
Options:
|
||||
--jpg ..... optimize all jpg images
|
||||
--png ..... optimize all png images
|
||||
--webp ..... convert all images in webp
|
||||
--avif ..... convert all images in avif
|
||||
--std ..... optimize all png & jpg images
|
||||
--next ..... convert all images in webp & avif
|
||||
--all ..... optimize all images (png + jpg + webp + avif)
|
||||
-i, --interactive ..... run img-optimize in interactive mode
|
||||
-q, --quiet ..... run image optimization quietly
|
||||
--path <images path> ..... define images path
|
||||
Other options :
|
||||
-h, --help, help ... displays this help information
|
||||
--cmin [+|-]<n> ... File's status was last changed n minutes ago.
|
||||
act find cmin argument (+n : greater than n, -n : less than n, n : exactly n)
|
||||
Examples:
|
||||
optimize all jpg images in /var/www/images
|
||||
img-optimize --jpg --path /var/www/images
|
||||
```
|
||||
|
||||
### Update the script
|
||||
|
||||
To update the script, just run :
|
||||
|
||||
```bash
|
||||
git -C $HOME/.img-optimize pull
|
||||
```
|
||||
|
||||
### Setup daily cronjob
|
||||
|
||||
You just have to copy the scripts to /etc/cron.daily :
|
||||
|
||||
```bash
|
||||
cp $HOME/.img-optimize/crons/jpg-png-cron.sh /etc/cron.daily/jpg-png-cron
|
||||
cp $HOME/.img-optimize/crons/jpg-png-cron.sh /etc/cron.daily/webp-cron
|
||||
|
||||
chmod +x /etc/cron.daily/jpg-png-cron
|
||||
chmod +x /etc/cron.daily/webp-cron
|
||||
```
|
||||
|
||||
Then just edit your websites path set with the variables `sites` at the beginning of the cron scripts.
|
||||
|
||||
## Warning
|
||||
|
||||
Conversion process can take a while, you can use `tmux` to launch the script and be able to close your ssh connection without interrupting conversion. Then just use `tmux attach` to login back in your tmux session.
|
||||
|
||||
## Credits
|
||||
|
||||
- WebP conversion script was inspired by this [DigitalOcean Community Tutorial](https://www.digitalocean.com/community/tutorials/how-to-create-and-serve-webp-images-to-speed-up-your-website)
|
||||
|
||||
- Tutorial about webp conversion available on [jesuisadmin.fr](https://jesuisadmin.fr/convertir-vos-images-en-webp-nginx/) (in french)
|
||||
|
|
73
optimize.sh
73
optimize.sh
|
@ -7,7 +7,7 @@
|
|||
# Author: VirtuBox
|
||||
# License: M.I.T
|
||||
# ----------------------------------------------------------------------------
|
||||
# Version 1.1 - 2019-07-12
|
||||
# Version 2.0 - 2020-11-10
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
CSI='\033['
|
||||
|
@ -27,8 +27,10 @@ _help() {
|
|||
echo " --jpg ..... optimize all jpg images"
|
||||
echo " --png ..... optimize all png images"
|
||||
echo " --webp ..... convert all images in webp"
|
||||
echo " --nowebp ..... optimize all png & jpg images"
|
||||
echo " --all ..... optimize all images (png + jpg + webp)"
|
||||
echo " --avif ..... convert all images in avif"
|
||||
echo " --std ..... optimize all png & jpg images"
|
||||
echo " --next ..... convert all images in webp & avif"
|
||||
echo " --all ..... optimize all images (png + jpg + webp + avif)"
|
||||
echo " -i, --interactive ..... run img-optimize in interactive mode"
|
||||
echo " -q, --quiet ..... run image optimization quietly"
|
||||
echo " --path <images path> ..... define images path"
|
||||
|
@ -60,18 +62,27 @@ else
|
|||
--png)
|
||||
PNG_OPTIMIZATION="y"
|
||||
;;
|
||||
--nowebp)
|
||||
--std)
|
||||
JPG_OPTIMIZATION="y"
|
||||
PNG_OPTIMIZATION="y"
|
||||
WEBP_OPTIMIZATION="n"
|
||||
AVIF_OPTIMIZATION="n"
|
||||
;;
|
||||
--next)
|
||||
AVIF_OPTIMIZATION="y"
|
||||
WEBP_OPTIMIZATION="y"
|
||||
;;
|
||||
--webp)
|
||||
WEBP_OPTIMIZATION="y"
|
||||
;;
|
||||
--avif)
|
||||
AVIF_OPTIMIZATION="y"
|
||||
;;
|
||||
--all)
|
||||
PNG_OPTIMIZATION="y"
|
||||
JPG_OPTIMIZATION="y"
|
||||
WEBP_OPTIMIZATION="y"
|
||||
AVIF_OPTIMIZATION="y"
|
||||
;;
|
||||
-i | --interactive)
|
||||
INTERACTIVE_MODE="1"
|
||||
|
@ -155,6 +166,16 @@ if [ "$INTERACTIVE_MODE" = "1" ]; then
|
|||
echo ""
|
||||
echo ""
|
||||
fi
|
||||
if [ -z "$AVIF_OPTIMIZATION" ]; then
|
||||
echo ""
|
||||
echo "Do you want to convert all jpg & png images to WebP in $IMG_PATH ? (y/n)"
|
||||
while [[ $AVIF_OPTIMIZATION != "y" && $AVIF_OPTIMIZATION != "n" ]]; do
|
||||
echo "Select an option [y/n]: "
|
||||
read -r AVIF_OPTIMIZATION
|
||||
done
|
||||
echo ""
|
||||
echo ""
|
||||
fi
|
||||
fi
|
||||
|
||||
##################################
|
||||
|
@ -170,9 +191,9 @@ if [ "$JPG_OPTIMIZATION" = "y" ]; then
|
|||
echo -ne ' jpg optimization [..]\r'
|
||||
cd "$IMG_PATH" || exit 1
|
||||
if [ -n "$FIND_ARGS" ]; then
|
||||
find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -cmin "$FIND_ARGS" -print0 | xargs -r -0 jpegoptim "$JPG_ARGS" --preserve --strip-all -m82
|
||||
find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -cmin "$FIND_ARGS" -print0 | xargs -r -0 jpegoptim "$JPG_ARGS" -p -s --all-progressive -m82
|
||||
else
|
||||
find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 | xargs -r -0 jpegoptim "$JPG_ARGS" --preserve --strip-all -m82
|
||||
find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 | xargs -r -0 jpegoptim "$JPG_ARGS" -p -s -m82 --all-progressive
|
||||
fi
|
||||
|
||||
echo -ne " jpg optimization [${CGREEN}OK${CEND}]\\r"
|
||||
|
@ -205,10 +226,10 @@ if [ "$WEBP_OPTIMIZATION" = "y" ]; then
|
|||
cd "$IMG_PATH" || exit 1
|
||||
if [ -n "$FIND_ARGS" ]; then
|
||||
find . -type f -iname "*.png" -cmin "$FIND_ARGS" -print0 | xargs -0 -r -I {} \
|
||||
bash -c '[ ! -f "{}.webp" ] && { cwebp -z 9 -mt -quiet "{}" -o "{}.webp"; }'
|
||||
bash -c "[ ! -f '{}.webp' ] && { cwebp -z 9 -mt $WEBP_ARGS '{}' -o '{}.webp'; }"
|
||||
else
|
||||
find . -type f -iname "*.png" -print0 | xargs -0 -r -I {} \
|
||||
bash -c '[ ! -f "{}.webp" ] && { cwebp -z 9 -mt -quiet "{}" -o "{}.webp"; }'
|
||||
bash -c "[ ! -f '{}.webp' ] && { cwebp -z 9 -mt $WEBP_ARGS '{}' -o '{}.webp'; }"
|
||||
fi
|
||||
echo -ne " png to webp conversion [${CGREEN}OK${CEND}]\\r"
|
||||
echo -ne '\n'
|
||||
|
@ -218,15 +239,47 @@ if [ "$WEBP_OPTIMIZATION" = "y" ]; then
|
|||
cd "$IMG_PATH" || exit 1
|
||||
if [ -n "$FIND_ARGS" ]; then
|
||||
find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -cmin "$FIND_ARGS" -print0 | xargs -0 -r -I {} \
|
||||
bash -c '[ ! -f "{}.webp" ] && { cwebp -quiet -q 82 -mt "{}" -o "{}.webp"; }'
|
||||
bash -c "[ ! -f '{}.webp' ] && { cwebp $WEBP_ARGS -q 82 -mt '{}' -o '{}.webp || rm -f '{}.webp''; }"
|
||||
else
|
||||
find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 | xargs -0 -r -I {} \
|
||||
bash -c '[ ! -f "{}.webp" ] && { cwebp -quiet -q 82 -mt "{}" -o "{}.webp"; }'
|
||||
bash -c "[ ! -f '{}.webp' ] && { cwebp $WEBP_ARGS -q 82 -mt '{}' -o '{}.webp' || rm -f '{}.webp'; }"
|
||||
fi
|
||||
|
||||
echo -ne " jpg to webp conversion [${CGREEN}OK${CEND}]\\r"
|
||||
echo -ne '\n'
|
||||
fi
|
||||
if [ "$AVIF_OPTIMIZATION" = "y" ]; then
|
||||
[ -z "$(command -v avif)" ] && {
|
||||
echo "Error: avif isn't installed"
|
||||
exit 1
|
||||
}
|
||||
# convert png to avif
|
||||
echo -ne ' png to avif conversion [..]\r'
|
||||
cd "$IMG_PATH" || exit 1
|
||||
if [ -n "$FIND_ARGS" ]; then
|
||||
find . -type f -iname "*.png" -cmin "$FIND_ARGS" -print0 | xargs -0 -r -I {} \
|
||||
bash -c "[ ! -f '{}.avif' ] && { avif -e '{}' -o '{}.avif' || rm -f '{}.avif'; }"
|
||||
else
|
||||
find . -type f -iname "*.png" -print0 | xargs -0 -r -I {} \
|
||||
bash -c "[ ! -f '{}.avif' ] && { avif -e '{}' -o '{}.avif' || rm -f '{}.avif'; }"
|
||||
fi
|
||||
echo -ne " png to avif conversion [${CGREEN}OK${CEND}]\\r"
|
||||
echo -ne '\n'
|
||||
|
||||
# convert jpg to avif
|
||||
echo -ne ' jpg to avif conversion [..]\r'
|
||||
cd "$IMG_PATH" || exit 1
|
||||
if [ -n "$FIND_ARGS" ]; then
|
||||
find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -cmin "$FIND_ARGS" -print0 | xargs -0 -r -I {} \
|
||||
bash -c "[ ! -f '{}.avif' ] && { avif -e '{}' -o '{}.avif' || rm -f '{}.avif'; } "
|
||||
else
|
||||
find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" \) -print0 | xargs -0 -r -I {} \
|
||||
bash -c "[ ! -f '{}.avif' ] && { avif -e '{}' -o '{}.avif' || rm -f '{}.avif'; }"
|
||||
fi
|
||||
|
||||
echo -ne " jpg to avif conversion [${CGREEN}OK${CEND}]\\r"
|
||||
echo -ne '\n'
|
||||
fi
|
||||
|
||||
# We're done !
|
||||
echo ""
|
||||
|
|
|
@ -24,7 +24,8 @@ curl -sL "$OPTIPNGLATEST" | tar -I pigz -xf -
|
|||
cd optipng-* || exit 1
|
||||
|
||||
# configure and compile optipng
|
||||
./configure --prefix=/usr
|
||||
./configure
|
||||
make -j "$(nproc)"
|
||||
strip --strip-unneeded /usr/local/src/optipng-*/src/optipng/optipng
|
||||
make install
|
||||
make install
|
||||
ldconfig
|
|
@ -24,7 +24,8 @@ curl -sL "https:$LATEST_WEBP" | tar -I pigz -xf -
|
|||
cd libwebp-* || exit
|
||||
|
||||
# configure libwebp and launch compilation
|
||||
./configure --prefix=/usr
|
||||
./configure
|
||||
make -j "$(nproc)"
|
||||
strip --strip-unneeded /usr/local/src/libwebp-*/examples/.libs/{cwebp,dwebp}
|
||||
make install
|
||||
ldconfig
|
||||
|
|
Loading…
Reference in New Issue
Block a user