YOGA Image Optimizer v1.2.0 is out! This version brings an improved interface and more generally a better user experience.
The YOGA Image Optimizer interface has been reworked to be more compact and less bloated. Let's see the changes.
First, the header bar. There is not too much to see here, the [+] and [–] buttons have been linked together and the vertical bar between them and the "Remove all" button has disappeared.
The image list part has more changes. The first one is that some columns have been merged. So the "Input Image" and the "Output Image" columns are now one, and the same goes for the "Status" and "Output Size" column as the status is no more needed once the optimization done. To merge multiple informations in one column, we now use multi-line texts along with font styles (font size and font weight) to keep this readable.
The refactoring of the image list was also the occasion to bring some improvements. You can now double-click on a row to open the associated input image, and when the output image is larger than the input one, a warning icon is added to signal it:
Output Options and Transformations
Finally, the output options section at the bottom of the window has been reorganized. The "basic" output options (image format and output file) has been separated from the "transformation" options. This makes the interface less bloated and will allow adding more transformation options in the future without having a too loaded interface.
A lot of work has been done on image preview in this version.
Before, when you drag-and-dropped a bunch of photo on YOGA Image Optimizer, it froze until all thumbnails were generated. Now, thumbnail generation is asynchronous so the application interface is no more frozen during image importation.
The thumbnail generation has also been sped up for Linux users. When you browse your folders with your favorite file browser (Nautilus, Dolphin, Thunar,...) or when you open an image in some software like GIMP, a thumbnail is generated and placed in a shared cache (generally located in ~/.cache/thumbnails/). YOGA Image Optimizer is now aware of this mechanism and will use the already generated thumbnails from it every time it is possible. This avoids a lot of useless computation and makes the preview loading almost instantaneous!
Better Error Handling
In previous versions of YOGA Image Optimizer, a broken image (invalid rotation metadata, truncated or corrupted file,...) could crash the image import and optimization processes. This is now fixed. If a thumbnail cannot be generated, it is replaced by a "broken image" icon instead.
And if an error occurs during the image optimization (because of a broken image, a permission issue for the output file, a lack of memory,...), this does not crash the whole process anymore. The error is simply reported in the "Output Size" column.
NOTE: there is currently no way to get the precise error from the graphical interface but errors are logged in the console.
Interface / User Experience:
- More compact and less bloated interface (#17)
- Allow opening input images in the default image viewer by double-clicking on them
- Asynchronous generation and loading of thumbnails to not freeze the interface when importing a lot of images (#26)
- Sped up thumbnail loading on Linux by using already generated thumbnails from the shared cache
- Sped up thumbnail generation using BOX sampling instead of LANCZOS
- Displayed a warning icon if the output image is larger than the input one
Bugfix / Code Improvement:
- Fixed a crash when generating thumbnails for JPEGs with an invalid orientation EXIF tag (#29)
- Fixed inverted width and height with rotated JPEGs
- Fixed a crash of the image import process when generating the thumbnail of a broken image (#27)
- Fixed a crash of the optimization batch if an error occurs when optimizing an image (#27)
- Fixed issues related to concurrent.futures on Python 3.7 and 3.8 (#32)
- Updated the code to not use deprecated constants on newer Pillow versions
- Various typo fixed (@kianmeng, #31)
- Dutch translation (incomplete) (@Vistaus, #25)
- German Translation (Jürgen Benvenuti)