{"id":13552420,"url":"https://github.com/zevilz/zImageOptimizer","last_synced_at":"2025-04-03T03:31:40.643Z","repository":{"id":52464667,"uuid":"111279998","full_name":"zevilz/zImageOptimizer","owner":"zevilz","description":"Simple image optimizer for JPEG, PNG and GIF images on Linux, MacOS and FreeBSD.","archived":false,"fork":false,"pushed_at":"2024-07-08T10:01:48.000Z","size":317,"stargazers_count":132,"open_issues_count":2,"forks_count":20,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-11-03T23:34:49.732Z","etag":null,"topics":["bash","freebsd","image-compression","image-optimization","jpeg","jpeg-image-compression","linux","optimization","png","png-compression"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zevilz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"custom":["https://sobe.ru/na/zimageoptimizer","https://www.paypal.com/paypalme/zevilz"]}},"created_at":"2017-11-19T09:05:44.000Z","updated_at":"2024-10-16T16:34:49.000Z","dependencies_parsed_at":"2024-08-01T12:20:45.687Z","dependency_job_id":"01986d96-0794-4812-a773-a76b9b58f0de","html_url":"https://github.com/zevilz/zImageOptimizer","commit_stats":{"total_commits":277,"total_committers":3,"mean_commits":92.33333333333333,"dds":"0.014440433212996373","last_synced_commit":"463a47fc8f790148eee7f156ad7b6e558b339675"},"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevilz%2FzImageOptimizer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevilz%2FzImageOptimizer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevilz%2FzImageOptimizer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevilz%2FzImageOptimizer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zevilz","download_url":"https://codeload.github.com/zevilz/zImageOptimizer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246933434,"owners_count":20857048,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash","freebsd","image-compression","image-optimization","jpeg","jpeg-image-compression","linux","optimization","png","png-compression"],"created_at":"2024-08-01T12:02:03.712Z","updated_at":"2025-04-03T03:31:35.615Z","avatar_url":"https://github.com/zevilz.png","language":"Shell","funding_links":["https://sobe.ru/na/zimageoptimizer","https://www.paypal.com/paypalme/zevilz","https://www.paypal.me/zevilz"],"categories":["Shell"],"sub_categories":[],"readme":"# zImageOptimizer [![Version](https://img.shields.io/badge/version-v0.10.6-orange.svg)](https://github.com/zevilz/zImageOptimizer/releases/tag/0.10.6) [![Donate](https://img.shields.io/badge/Donate-PayPal-blue.svg)](https://www.paypal.me/zevilz)\n\nSimple bash script for lossless image optimizing JPEG, PNG and GIF images in a specified directory include subdirectories on Linux, MacOS and FreeBSD.\n\n## Features\n- lossless image optimization with a small image size in the output;\n- works recursively;\n- checks optimization tools after the start;\n- option for automatic install dependencies and optimization tools if one or more of it is not found (see supported distributions [here](https://github.com/zevilz/zImageOptimizer#automatical-installing-dependencies));\n- readable output info and total info after optimization;\n- no limit for a file size (limited only by hardware);\n- no limit for a number of files;\n- no limit for a length of a filename (limited only by a file system);\n- supports for special characters (except slashes and back slashes), spaces, not latin characters in a filename;\n- supports for search of images changed in a certain period of time;\n- supports for use of the special time marker for search only new files (based on last modify time).\n- supports extensions via special hooks\n\n## Requirements\n- bash 4+\n\n## Tools\nJPEG:\n- [jpegoptim](http://www.kokkonen.net/tjko/projects.html)\n- jpegtran, djpeg and cjpeg (from [libjpeg library](http://www.ijg.org/))\n\nPNG:\n- [pngcrush](http://pmt.sourceforge.net/pngcrush/) (v1.7.22+)\n- [optipng](http://optipng.sourceforge.net/) (v0.7+)\n- [pngout](http://www.jonof.id.au/kenutils)\n- advpng (from [AdvanceCOMP library](http://www.advancemame.it/comp-readme.html))\n\nGIF:\n- [gifsicle](http://www.lcdf.org/gifsicle/)\n\nOne or more tools required for optimization. djpeg/cjpeg does not support CMYK colorspace and does not participate in the optimization of such images.\n\nNotice: Optimization via djpeg/cjpeg is currently temporarily disabled to prevent an increase in size of output files in lossless mode. Later, djpeg/cjpeg options for lossless compression and small output file size will be selected.\n\n## Usage\n\n### Usual usage\n```bash\nbash zImageOptimizer.sh -p /path/to/files\n```\nor\n```bash\nbash zImageOptimizer.sh --path=/path/to/files\n```\n\nSupported options:\n- `-h (--help)` - shows a help message;\n- `-v (--version)` - shows a script version;\n- `-p (--path)` - specify a full path to the input directory (usage: `-p \u003cdir\u003e | --path=\u003cdir\u003e`);\n- `-q (--quiet)` - executes the script without any questions and users actions;\n- `-l (--less)` - don't shows the optimizing process;\n- `-c (--check-only)` - checks tools with an opportunity to install dependencies;\n- `-t (--time)` - sets the period for which to look for files by last modified time (usage: `-t \u003cperiod\u003e | --time=\u003cperiod\u003e`);\n- `-n (--new-only)` - use the time marker file for looking new images only;\n- `-m (--time-marker)` - sets the custom full path or the custom filename of a time marker file (usage: `-m \u003cname|path\u003e | --time-marker=\u003cname|path\u003e`);\n- `-tmp (--tmp-path)` - sets the custom directory full path for temporary files (usage: `-tmp \u003cdir\u003e | --tmp-path=\u003cdir\u003e`);\n- `-e (--exclude)` - a comma separated parts list of paths to files for an exclusion from search (the script removes from the search files in the full path of which includes any value from the list; usage: `-e \u003clist\u003e | --exclude=\u003clist\u003e`);\n- `-ext (--extensions)` - a comma separated list of script's extensions to enable. Script's extensions disabled by default. Use `all` to enable all found extensions (usage: `-ext \u003clist\u003e | --extensions=\u003clist\u003e | -ext all | --extensions=all`).\n- `--unlock` - manually delete target dir from lockfile if previous script launch was interrupted incorrectly or killed by system.\n\nNotices:\n- you may combine options;\n- `-h (--help)` option ignore all other options;\n- `-v (--version)` option ignore all other options (except for `-h (--help)`);\n- `-c (--check-only)` option ignore all other options (except for `-h (--help)` and `-v (--version)`);\n- path in `-p (--path)` and `-tmp (--tmp-path)` options may be with and without a slash in the end of the path;\n- it is impossible to use together `-t (--time)` and `-n (--new-only)` options;\n- you must use `-m (--time-marker)` option with `-n (--new-only)` option;\n- you must use `--unlock` option with `-p (--path)` option (just add `--unlock` option in next run);\n- you can install dependencies without any questions in check mode (`-c (--check-only)`) using `-q (--quiet)` option. \n\nRecommendation: use [GNU Screen](https://en.wikipedia.org/wiki/GNU_Screen) or analogs if there are many images in an input directory, because the optimization may can take long time.\n\nAfter starting optimization, the script creates special temporary lock file (`/tmp/zio.lock` by default), where path to working directory is added. After optimization is finished, the script deletes this file (or deletes current path to working directory from the file with several parallel optimizations). This is done to prevent cycling optimization and avoid conflicts during optimization for longer than period between optimizations. Notice: if the script is terminated abnormally, you should delete lock file manually.\n\n### Excluding folders/files from search\n```bash\nbash zImageOptimizer.sh -p /path/to/files -e \u003clist\u003e\n```\n\nExample:\n```bash\nbash zImageOptimizer.sh -p /path/to/files -e /var/www/test.com,backup,uploads/orig.png\n```\n\n### Usage with set the period\n```bash\nbash zImageOptimizer.sh -p /path/to/files -t \u003cperiod\u003e\n```\n\nSupported periods:\n- minutes (10m, 30m etc.),\n- hours (1h, 10h etc.),\n- days (1d, 30d  etc.).\n\nExample:\n```bash\nbash zImageOptimizer.sh -p /path/to/files -t 15d\n```\n\n### Usage with the time marker (recommended for a cron usage)\n```bash\nbash zImageOptimizer.sh -p /path/to/files -n\n```\n\nNotice: by default the time marker file created in working a directory which set in `-p (--path)` option with a filename **.timeMarker**.\n\n#### Custom time marker name\nUse `-m (--time-marker)` option and set a new filename if you want to change the time marker filename:\n```bash\nbash zImageOptimizer.sh -p /path/to/files -n -m myCustomMarkerName\n```\nPath to time marker will be `/path/to/files/myCustomMarkerName`\n\n#### Custom time marker path and name\nUse `-m (--time-marker)` option and set a new path and filename if you want to change the time marker path:\n```bash\nbash zImageOptimizer.sh -p /path/to/files -n -m /path/to/marker/directory/markerName\n```\nPath to the time marker will be `/path/to/marker/directory/markerName`\n\n#### Cron usage\nUsing default time marker:\n```bash\n0 0 * * * /bin/bash zImageOptimizer.sh -p /first/directory -q -n\n0 1 * * * /bin/bash zImageOptimizer.sh -p /second/directory -q -n\n```\n\nUsing custom time marker path and filename:\n```bash\n0 0 * * * /bin/bash zImageOptimizer.sh -p /first/directory -q -n -m /path/to/first/marker/firstMarkerName\n0 1 * * * /bin/bash zImageOptimizer.sh -p /second/directory -q -n -m /path/to/second/marker/secondMarkerName\n```\n\nAlso you may collect all markers in own directory:\n```bash\n0 0 * * * /bin/bash zImageOptimizer.sh -p /first/directory -q -n -m /path/to/markers/directory/firstMarkerName\n0 1 * * * /bin/bash zImageOptimizer.sh -p /second/directory -q -n -m /path/to/markers/directory/secondMarkerName\n```\n\nNotice: use `-l (--less)` option if you want exclude optimizing process in cron email messages\n\n#### Manually create/modify the time marker file\nYou may manually create the time marker file or change it last modified time:\n```bash\ntouch -m /path/to/marker/markerName\n```\n\nIf you want to create the marker with specify time or change marker last modified time with specify time:\n```bash\ntouch -t [[CC]YY]MMDDhhmm[.SS]\n```\nwhere:\n- `CC` – 2 first digits of the year,\n- `YY` – 2 last digits of the year,\n- `MM` – month,\n- `DD` – date,\n- `hh` – hours in 24 format,\n- `mm` – minutes,\n- `SS` – seconds.\n\nExample:\n```bash\ntouch -t 201712041426.00 /path/to/marker/markerName\n```\n\n### Usage with custom path to the temporary files directory\n```bash\nbash zImageOptimizer.sh -p /path/to/files -tmp /custom/path/to/temporary/directory\n```\n\n## Docker\n\nDocker image provided by [Varun Batra](https://github.com/VarunBatraIT).\n\nIf you have built the docker container then dependencies are installed already. To use docker either start with mounting to /work/images folder which is compressed every 15 days for example:\n\n```bash\ndocker run -u \"$UID:$GID\" --volume /path/to/images:/work/images -v /etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro  varunbatrait/zimageoptimizer\n```\n\nOr you can come up with your own CMD for example:\n\n```bash\n# mkdir /mnt/ImagesHundred/marker\ndocker run -it -u \"$UID:$GID\" -d --volume /mnt/ImagesHundred/marker:/work/marker --volume /mnt/ImagesHundred/images/:/work/images/ -v /etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro varunbatrait/zimageoptimizer ./zImageOptimizer.sh -p /work/images/ -q -n -m /work/marker/marker\n```\n\n## Automatical installing dependencies\nNotice: curent user must be root or user with sudo access.\n\nStart the script in the optimization mode (`-p|--path`) or the checking tools mode (`-c|--check-only`, recommended) if you want to install dependencies automatically. It will check installed tools and printing a choise option dialog if one or more tools not found. Select **Install dependencies and exit** option by typing a appropriate number and press enter. The script will install dependencies based on your platform, distribution and package manager. You may need to enter a password and confirm actions during installation dependencies. Restart script to recheck installed tools after that.\n\nSupported on:\n- DEB-based linux distributions (i686/amd64)\n  - Debian 7+\n  - Ubuntu 14.04+\n- RPM-based linux distributions (i686/x86_64)\n  - RHEL 6+\n  - CentOS 6+\n  - Fedora 24+\n- FreeBSD 10+ (i686/amd64)\n- MacOS 10+\n\nTested on:\n- DEB-based linux distributions\n  - Debian 7.11 i686 minimal\n  - Debian 8.9 i686 minimal\n  - Debian 9.2 amd64\n  - Debian 10 i686\n  - Debian 10 amd64\n  - Debian 11 amd64\n  - Debian 12 amd64\n  - Ubuntu 14.04.5 amd64\n  - Ubuntu 16.04.3 amd64\n  - Ubuntu 18.04.2 amd64\n- RPM-based linux distributions\n  - RHEL 6.9 i686 minimal\n  - RHEL 7.4 x86_64 server\n  - CentOS 6.9 x86_64 minimal\n  - CentOS 7.4.1708 x86_64 minimal\n  - Fedora 24 i686 minimal\n  - Fedora 25 x86_64 minimal\n  - Fedora 26 x86_64 minimal\n  - Fedora 27 x86_64 workstation\n  - Fedora 30 beta x86_64 server (required `initscripts` package)\n- FreeBSD (in some cases it may be necessary to run auto-install twice)\n  - 10.3 i686\n  - 11.1 amd64\n  - 11.2 amd64\n  - 12.0 amd64\n- MacOS\n  - 10.10\n  - 10.11.6\n  - 10.13.6\n  - 11.2.1\n\nIf you have errors during installing dependencies on supported platforms please contact me or open issue.\n\n## Manual installing dependencies\nNotice: curent user must be root or user with sudo access.\n\n**Install following packages from repositories/ports**\n\nDEB-based:\n```bash\napt-get install jpegoptim libjpeg-progs pngcrush optipng advancecomp gifsicle wget autoconf automake libtool make bc -y\n```\n\nRHEL:\n```bash\nyum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-$(rpm -E '%{rhel}').noarch.rpm -y\nsubscription-manager repos --enable rhel-$(rpm -E '%{rhel}')-server-optional-rpms\nyum install jpegoptim libjpeg* pngcrush optipng advancecomp gifsicle wget autoconf automake libtool make bc -y\n```\n\nCentOS:\n```bash\nyum install epel-release -y\nyum install jpegoptim libjpeg* pngcrush optipng advancecomp gifsicle wget autoconf automake libtool make bc -y\n```\n\nFedora:\n```bash\ndnf install epel-release -y\ndnf install jpegoptim libjpeg* pngcrush optipng advancecomp gifsicle wget autoconf automake libtool make bc -y\n```\n\nMacOS:\n\nInstall homebrew if not installed\n```bash\n/usr/bin/ruby -e \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)\"\n```\n\nInstall packages via homebrew\n```bash\nbrew install jpegoptim libjpeg pngcrush optipng advancecomp gifsicle jonof/kenutils/pngout\n```\n\nInstall new bash version (default 3.* version not supported) via homebrew\n```bash\nbrew install bash\n```\n\nAdd path to new bash version in `/private/etc/shells`\n```bash\n/usr/local/bin/bash\n```\n\nAdd alias to new bash version in `~/.bash_profile`\n```bash\nalias bash=\"/usr/local/bin/bash\"\n```\n\nLogout and login again for enable new alias or add permanent alias for curent session\n```bash\nalias bash=\"/usr/local/bin/bash\"\n```\n\nFreeBSD:\n\nInstall following ports\n```bash\nwget (/usr/ports/ftp/wget)\njpegoptim (/usr/ports/graphics/jpegoptim)\njpeg (/usr/ports/graphics/jpeg)\npngcrush (/usr/ports/graphics/pngcrush)\noptipng (/usr/ports/graphics/optipng)\nadvancecomp (/usr/ports/archivers/advancecomp)\ngifsicle (/usr/ports/graphics/gifsicle)\n```\n\n**Install pngout**\n\nLinux:\n```bash\nwget http://static.jonof.id.au/dl/kenutils/pngout-20150319-linux.tar.gz\ntar -xf pngout-20150319-linux.tar.gz\nrm pngout-20150319-linux.tar.gz\ncp pngout-20150319-linux/i686/pngout /bin/pngout     # for i686 arch\ncp pngout-20150319-linux/x86_64/pngout /bin/pngout   # for x86_64/amd64 arch\nrm -rf pngout-20150319-linux\n```\n\nFreeBSD:\n```bash\nwget http://static.jonof.id.au/dl/kenutils/pngout-20150319-bsd.tar.gz\ntar -xf pngout-20150319-bsd.tar.gz\nrm pngout-20150319-bsd.tar.gz\ncp pngout-20150319-bsd/i686/pngout /bin/pngout    # for i686 arch\ncp pngout-20150319-bsd/amd64/pngout /bin/pngout   # for amd64 arch\nrm -rf pngout-20150319-bsd\n```\n\n**Install pngcrush (RHEL/CentOS 6.*)**\n```bash\nwget https://downloads.sourceforge.net/project/pmt/pngcrush/old-versions/1.8/1.8.0/pngcrush-1.8.0.tar.gz\ntar -zxvf pngcrush-1.8.0.tar.gz\nrm pngcrush-1.8.0.tar.gz\ncd pngcrush-1.8.0\nmake\ncp pngcrush /bin/\ncd ../\nrm -rf pngcrush-1.8.0\n```\n\n**Install advpng (RHEL/CentOS 6.*)**\n```bash\nyum install zlib-devel gcc-c++ -y\nwget https://github.com/amadvance/advancecomp/releases/download/v2.0/advancecomp-2.0.tar.gz\ntar -zxvf advancecomp-2.0.tar.gz\nrm advancecomp-2.0.tar.gz\ncd advancecomp-2.0\n./configure\nmake\nmake install\ncd ../\nrm -rf advancecomp-2.0\n```\n\n## Extensions\n\nThe script have support for extensions using special hooks. You can use [prepared extensions](https://github.com/zevilz/zImageOptimizer-extensions) or [make own](https://github.com/zevilz/zImageOptimizer/wiki/Extensions-development).\n\nExtensions must be placed in `extensions` directory near the main script. Extensions disabled by default. Use `-ext (--extensions)` to enable needed:\n```bash\nbash zImageOptimizer.sh -p /path/to/files -ext my_extension,another_extension\n```\n\nInformation about extensions you can see after launch the script. It automatically check selected extensions exists in `extensions` directory.\n\nOr you can enable all extensions from dir `extensions`:\n```bash\nbash zImageOptimizer.sh -p /path/to/files -ext all\n```\n\n## Troubleshooting\n\n**I'm install dependencies but one of tool is marked as NOT FOUND**\n\nBy default the script looks for binary files into folowing directories `/bin` `/usr/bin` `/usr/local/bin`. If your binary file is not in these directories add your directory in variable `BINARY_PATHS` through a space like below and restart the script\n```bash\nBINARY_PATHS=\"/bin /usr/bin /usr/local/bin /your/custom/path\"\n```\n\n**I have errors `djpeg: can't open /tmp/*` and `cjpeg: can't open /tmp/*` during optimization**\n\nYou have not write access to the directory /tmp. Tools djpeg and cjpeg use this directory for temporary files. Use `-tmp (--tmp-path)` option for set custom path.\n\n**I run the script but have error `The directory is already locked by another script run! Exiting...`**\n\nThe script is already running in specified directory. If not, previous run of the script was not completed correctly. Delete dir from lock file (`/tmp/zio.lock` by default) or delete it manually and repeat. Also you can add `--unlock` option in next launch (dir automatically delete from lock file).\n\n## TODO\n- [x] ~~add option for execute the script without any questions and users actions (for cron usage)~~\n- [x] ~~add option for set time of the last change files for optimize only new images (for cron usage)~~\n- [ ] add an option for set quality for more small files in the output\n- [x] ~~add an option for check tools only~~\n- [x] ~~add support for optimize gif images~~\n- [x] ~~add support for automatic install dependencies on other platforms and distributions with other package managers~~\n- [ ] add support for automatic install dependencies on others linux distributions\n- [ ] add support for parallel optimization\n- [ ] even more to improve results of compression\n- [ ] add SVG support\n- [ ] add WebP optimizing support (converting to WebP supported via [extension](https://github.com/zevilz/zImageOptimizer-extensions#create_webp))\n- [ ] add support for detect wrong files extensions\n- [ ] add support for convert or rename images with wrong files extensions\n- [ ] add logging\n- [ ] add Ansible playbook\n- [x] ~~add progrees indicator~~\n- [x] ~~add extensions support~~\n- [x] ~~add lock file to prevent cyclical optimization with long image optimization~~\n- [ ] add repository for debian/ubuntu\n- [ ] add repository for rhel/centos/fedora\n\n## Contacts\n- telegram [@zevilz](https://t.me/zevilz) (EN|RU)\n- telegram chat [@zImageOptimizer](https://t.me/zImageOptimizer) (RU)\n\n## Reviews\n- [sysadmin.pm](https://sysadmin.pm/zimageoptimizer/) (RU)\n- [glashkoff.com](https://glashkoff.com/blog/manual/kak-optimizirovat-izobrazheniya-sayta/) (RU)\n\n## Donations\nDo you like the script? Would you like to support its development? Feel free to donate\n\n[![Donate](https://img.shields.io/badge/Donate-PayPal-blue.svg)](https://www.paypal.me/zevilz)\n\n## Changelog\n- 14.09.2023 - 0.10.6 - check file exists before optimizing\n- 09.03.2021 - 0.10.5 - added support for automatic install dependencies on MacOS 11+\n- 27.09.2020 - 0.10.4 - fixed permissions and modify time for optimized images\n- 03.09.2020 - 0.10.3 - preserve permissions and modify time during backup/restore\n- 03.09.2020 - 0.10.2 - added BACKUP var in main loop for extensions, refactoring\n- 16.08.2020 - 0.10.1 - [bugfix](https://github.com/zevilz/zImageOptimizer/releases/tag/0.10.1)\n- 03.08.2020 - 0.10.0 - added `--unlock` option, added new hooks for extensions, bugfixes\n- 04.05.2019 - 0.9.9 - bugfix (added check for using time marker in function fixTimeMarker)\n- 02.05.2019 - 0.9.8 - [changed logic of time marker, bugfix](https://github.com/zevilz/zImageOptimizer/releases/tag/0.9.8)\n- 02.05.2019 - 0.9.8 - [changed logic of time marker, bugfix](https://github.com/zevilz/zImageOptimizer/releases/tag/0.9.8)\n- 29.04.2019 - 0.9.7 - improved support for extensions, added new hooks and [more](https://github.com/zevilz/zImageOptimizer/releases/tag/0.9.7)\n- 20.04.2019 - 0.9.6 - added support for extensions, added lock file and [more](https://github.com/zevilz/zImageOptimizer/releases/tag/0.9.6)\n- 06.02.2019 - 0.9.5 - fixed quality in cjpeg/djpeg compression\n- 28.10.2018 - 0.9.4 - [added check for empty temporary file after decompress images with djpeg](https://github.com/zevilz/zImageOptimizer/releases/tag/0.9.4)\n- 11.03.2018 - 0.9.3 - added a restoration of original files if their size is less or equal than optimized files size\n- 27.02.2018 - 0.9.2 - fixed PNG file permissions if the script does not work from files owner\n- 27.02.2018 - 0.9.1 - [added new features](https://github.com/zevilz/zImageOptimizer/releases/tag/0.9.1) and bugfixes\n- 25.02.2018 - 0.9.0 - added support for working the script on MacOS 10.10+ with automatic install dependencies\n- 24.02.2018 - 0.8.1 - [added new parameter, updated info after optimizing, small fixes and small code refactoring](https://github.com/zevilz/zImageOptimizer/releases/tag/0.8.1)\n- 04.12.2017 - 0.8.0 - [new features, bugfixes and code refactoring](https://github.com/zevilz/zImageOptimizer/releases/tag/0.8.0)\n- 30.11.2017 - 0.7.0 - added support for working the script on FreeBSD with automatic install dependencies, [bug fixes and more](https://github.com/zevilz/zImageOptimizer/releases/tag/0.7.0)\n- 28.11.2017 - 0.6.0 - added support for automatic install dependencies on RHEL 6+ and Fedora 24+\n- 25.11.2017 - 0.5.0 - bug fixes and code refactoring\n- 25.11.2017 - 0.4.0 - added support for automatic install dependencies on Debian 7.* and some bugfixes\n- 23.11.2017 - 0.3.0 - added support for automatic install dependencies on CentOS 6.*\n- 22.11.2017 - 0.2.3 - some bug fixes\n- 21.11.2017 - 0.2.2 - added support for automatic install dependencies on CentOS 7.*\n- 20.11.2017 - 0.2.1 - some bug fixes\n- 20.11.2017 - 0.2.0 - added [some features](https://github.com/zevilz/zImageOptimizer/releases/tag/0.2.0) and code refactoring\n- 19.11.2017 - 0.1.1 - some bug fixes\n- 19.11.2017 - 0.1.0 - beta released\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzevilz%2FzImageOptimizer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzevilz%2FzImageOptimizer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzevilz%2FzImageOptimizer/lists"}