From d46197718b4ed2513a55b0a34a0bfcd322fdaff3 Mon Sep 17 00:00:00 2001 From: rohithzr Date: Wed, 19 Jul 2023 21:18:13 +0530 Subject: [PATCH 1/7] add features --- jekyll-webp.gemspec | 3 +- lib/jekyll-webp/defaults.rb | 15 +++++++++- lib/jekyll-webp/version.rb | 2 +- lib/jekyll-webp/webpExec.rb | 6 ++-- lib/jekyll-webp/webpGenerator.rb | 48 ++++++++++++++++++++++++++++++-- 5 files changed, 66 insertions(+), 8 deletions(-) diff --git a/jekyll-webp.gemspec b/jekyll-webp.gemspec index ff76bc6..d85c9f3 100644 --- a/jekyll-webp.gemspec +++ b/jekyll-webp.gemspec @@ -5,7 +5,7 @@ Gem::Specification.new do |spec| spec.name = "jekyll-webp" spec.version = Jekyll::Webp::VERSION spec.platform = Gem::Platform::RUBY - spec.date = DateTime.now.strftime('%Y-%m-%d') + # spec.date = DateTime.now.strftime('%Y-%m-%d') spec.authors = ["Sverrir Sigmundarson"] spec.email = ["jekyll@sverrirs.com"] spec.homepage = "https://github.com/sverrirs/jekyll-webp" @@ -23,4 +23,5 @@ Gem::Specification.new do |spec| spec.add_development_dependency "bundler", "~> 1.5" spec.add_development_dependency "rake", "~> 1.5" spec.add_development_dependency "minitest", '~> 5.4', '>= 5.4.3' + spec.add_development_dependency "fastimage", '>= 2.0.0' end \ No newline at end of file diff --git a/lib/jekyll-webp/defaults.rb b/lib/jekyll-webp/defaults.rb index e079e9e..eec13c0 100644 --- a/lib/jekyll-webp/defaults.rb +++ b/lib/jekyll-webp/defaults.rb @@ -43,7 +43,20 @@ module Webp # List of files or directories to explicitly include # e.g. single files outside of the main image directories - 'include' => [] + 'include' => [], + + # Use a different output subdirectory + # e.g. value of "/optimized" will create files at "/source/optimized" instead of "/source" + 'output_img_sub_dir' => "", + + # Generate thumbnails + 'thumbs' => false, + + # Thumbnails sub directory + 'thumbs_dir' => "/thumbs", + + # generate .5x images + 'generate_50p' => false } end # module Webp diff --git a/lib/jekyll-webp/version.rb b/lib/jekyll-webp/version.rb index 230697d..adf7b05 100644 --- a/lib/jekyll-webp/version.rb +++ b/lib/jekyll-webp/version.rb @@ -1,6 +1,6 @@ module Jekyll module Webp - VERSION = "1.0.0" + VERSION = "1.1.0" # When modifying remember to issue a new tag command in git before committing, then push the new tag # git tag -a v1.0.0 -m "Gem v1.0.0" # git push origin --tags diff --git a/lib/jekyll-webp/webpExec.rb b/lib/jekyll-webp/webpExec.rb index 9be6054..30fdc22 100644 --- a/lib/jekyll-webp/webpExec.rb +++ b/lib/jekyll-webp/webpExec.rb @@ -1,4 +1,5 @@ require 'open3' +require 'fastimage' module Jekyll module Webp @@ -41,12 +42,13 @@ def self.run(quality, flags, input_file, output_file, webp_bin_fullpath) stdin.close # we don't pass any input to the process output = stdout.gets error = stderr.gets + exit_code = wait_thr.value end if exit_code != 0 - Jekyll.logger.error("WebP:","Conversion for image #{input_file} failed, no webp version could be created for this image") - Jekyll.logger.debug("WebP:","cwebp returned #{exit_code} with error #{error}") + # Jekyll.logger.error("WebP:","Conversion for image #{input_file} failed, no webp version could be created for this image") + Jekyll.logger.error("WebP:","cwebp returned #{exit_code} with error #{error}") end # Return any captured return value diff --git a/lib/jekyll-webp/webpGenerator.rb b/lib/jekyll-webp/webpGenerator.rb index 1e6217f..b4d303e 100644 --- a/lib/jekyll-webp/webpGenerator.rb +++ b/lib/jekyll-webp/webpGenerator.rb @@ -52,6 +52,7 @@ def generate(site) # Counting the number of files generated file_count = 0 + thumb_count = 0 # Iterate through every image in each of the image folders and create a webp image # if one has not been created already for that image. @@ -59,6 +60,12 @@ def generate(site) imgdir_source = File.join(site.source, imgdir) imgdir_destination = File.join(site.dest, imgdir) FileUtils::mkdir_p(imgdir_destination) + if @config['output_img_sub_dir'] != "" + FileUtils::mkdir_p(File.join(imgdir_destination, @config['output_img_sub_dir'])) + end + if @config['thumbs'] + FileUtils::mkdir_p(File.join(imgdir_destination, @config['thumbs_dir'])) + end Jekyll.logger.info "WebP:","Processing #{imgdir_source}" # handle only jpg, jpeg, png and gif @@ -80,8 +87,13 @@ def generate(site) file_noext = File.basename(imgfile, file_ext) file_noext + ".webp" end + + small_outfile_filename = File.basename(imgfile, file_ext) + "-small" + ".webp" + FileUtils::mkdir_p(imgdir_destination + imgfile_relative_path) - outfile_fullpath_webp = File.join(imgdir_destination + imgfile_relative_path, outfile_filename) + outfile_fullpath_webp = File.join(imgdir_destination + imgfile_relative_path, @config['output_img_sub_dir'], outfile_filename) + small_outfile_fullpath_webp = File.join(imgdir_destination + imgfile_relative_path, @config['output_img_sub_dir'], small_outfile_filename) + thumb_outfile_fullpath_webp = File.join(imgdir_destination + imgfile_relative_path, @config['thumbs_dir'], outfile_filename) # Check if the file already has a webp alternative? # If we're force rebuilding all webp files then ignore the check @@ -94,18 +106,48 @@ def generate(site) # Generate the file WebpExec.run(@config['quality'], @config['flags'], imgfile, outfile_fullpath_webp, @config['webp_path']) file_count += 1 + + if @config['generate_50p'] + # Get the image size + Jekyll.logger.info "WebP:", "Generating small image file #{outfile_filename}" + image_size = FastImage.size(imgfile, :raise_on_failure=>true, :timeout=>2.0) + h_width = image_size[0] / 2 + size_flags = "-resize #{h_width} 0" + " " + @config['flags'] + WebpExec.run(@config['quality'], size_flags, imgfile, small_outfile_fullpath_webp, @config['webp_path']) + end + + # Generate the thumbnails + if @config['thumbs'] + Jekyll.logger.info "WebP:", "Generating thumbnail for #{outfile_filename} in #{@config['thumbs_dir']}" + thumb_flags = "-resize 400 0" + " " + @config['flags'] + WebpExec.run(@config['quality'], thumb_flags, imgfile, thumb_outfile_fullpath_webp, @config['webp_path']) + thumb_count += 1 + end end + if File.file?(outfile_fullpath_webp) # Keep the webp file from being cleaned by Jekyll site.static_files << WebpFile.new(site, site.dest, - File.join(imgdir, imgfile_relative_path), + File.join(imgdir, imgfile_relative_path, @config['output_img_sub_dir']), + outfile_filename) + if @config['thumbs'] + site.static_files << WebpFile.new(site, + site.dest, + File.join(imgdir, imgfile_relative_path, @config['thumbs_dir']), outfile_filename) + end + if @config['generate_50p'] + site.static_files << WebpFile.new(site, + site.dest, + File.join(imgdir, imgfile_relative_path, @config['output_img_sub_dir']), + small_outfile_filename) + end end end # dir.foreach end # img_dir - Jekyll.logger.info "WebP:","Generator Complete: #{file_count} file(s) generated" + Jekyll.logger.info "WebP:","Generator Complete: #{file_count} file(s) generated #{thumb_count} thumbnail(s) generated" end #function generate From 64d782001e5af003bf28823e1a9d356db45b45b4 Mon Sep 17 00:00:00 2001 From: rohithzr Date: Wed, 19 Jul 2023 22:05:51 +0530 Subject: [PATCH 2/7] add readme --- README.md | 44 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 251bd1b..ac19556 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,24 @@ -[![Gem Version](https://img.shields.io/gem/v/jekyll-webp.svg)](https://rubygems.org/gems/jekyll-webp) -[![Gem](https://img.shields.io/gem/dt/jekyll-webp.svg)](https://rubygems.org/gems/jekyll-webp) -[![Join the chat at https://gitter.im/jekyll-webp/Lobby](https://badges.gitter.im/jekyll-webp/Lobby.svg)](https://gitter.im/jekyll-webp/Lobby) -[![Dependency Status](https://gemnasium.com/badges/github.com/sverrirs/jekyll-webp.svg)](https://gemnasium.com/github.com/sverrirs/jekyll-webp) -[![Code Climate](https://codeclimate.com/github/sverrirs/jekyll-webp/badges/gpa.svg)](https://codeclimate.com/github/sverrirs/jekyll-webp) -[![security](https://hakiri.io/github/sverrirs/jekyll-webp/master.svg)](https://hakiri.io/github/sverrirs/jekyll-webp/master) - -# WebP Generator for Jekyll +# WebP Generator for Jekyll (Extended) WebP Image Generator for Jekyll Sites can automatically generate WebP images for all images on your static site and serve them when possible. View on [rubygems.org](https://rubygems.org/gems/jekyll-webp). -> Read more about this tool on my blog at blog.sverrirs.com +**This repo is an extended version of it's fork `jekyll-webp`** -## Installation +## Additional Features +- Generate thumbnails in webp format +- Generate small images (.5x) in webp format +- Specifiy output sub directory for webp images + +## Additional Dependencies +- fastimage + +## Installation instructions +``` +group :jekyll_plugins do + gem 'jekyll-webp', git: 'https://github.com/Rohithzr/jekyll-webp-ext', branch: 'extend' +end +``` + +## Original installation instructions ``` gem install jekyll-webp @@ -63,6 +71,22 @@ webp: # append '.webp' to filename after original extension rather than replacing it. # Default transforms `image.png` to `image.webp`, while changing to true transforms `image.png` to `image.png.webp` append_ext: false + + ##### Extended Features start + # Use a different output subdirectory + # e.g. value of "/optimized" will create files at "/source/optimized" instead of "/source" + output_img_sub_dir: "/optimized" # default "" + + # Generate thumbnails + thumbs: true + + # Thumbnails sub directory + thumbs_dir: "/thumbs" + + # generate .5x images + generate_50p: true + + ##### Extended Features end ############################################################ ``` From 9d5a5682bd471ff55f9cf1e3a9267b2e83a545b4 Mon Sep 17 00:00:00 2001 From: Rohit Hazra Date: Wed, 19 Jul 2023 22:08:49 +0530 Subject: [PATCH 3/7] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ac19556..b4fc271 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # WebP Generator for Jekyll (Extended) WebP Image Generator for Jekyll Sites can automatically generate WebP images for all images on your static site and serve them when possible. View on [rubygems.org](https://rubygems.org/gems/jekyll-webp). -**This repo is an extended version of it's fork `jekyll-webp`** +**This repo is an extended version of it's fork [https://github.com/sverrirs/jekyll-webp](`jekyll-webp`)** ## Additional Features - Generate thumbnails in webp format From e5b618e12a2f92da08dbbb3c8a83cca2df3f2caf Mon Sep 17 00:00:00 2001 From: Rohit Hazra Date: Wed, 19 Jul 2023 22:09:22 +0530 Subject: [PATCH 4/7] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b4fc271..f825909 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # WebP Generator for Jekyll (Extended) WebP Image Generator for Jekyll Sites can automatically generate WebP images for all images on your static site and serve them when possible. View on [rubygems.org](https://rubygems.org/gems/jekyll-webp). -**This repo is an extended version of it's fork [https://github.com/sverrirs/jekyll-webp](`jekyll-webp`)** +**This repo is an extended version of it's fork [`jekyll-webp`](https://github.com/sverrirs/jekyll-webp)** ## Additional Features - Generate thumbnails in webp format From 201ec953c464cee8c5ccd3110743f987f094d5b2 Mon Sep 17 00:00:00 2001 From: rohithzr Date: Wed, 19 Jul 2023 22:10:26 +0530 Subject: [PATCH 5/7] add readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f825909..abd22e7 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # WebP Generator for Jekyll (Extended) WebP Image Generator for Jekyll Sites can automatically generate WebP images for all images on your static site and serve them when possible. View on [rubygems.org](https://rubygems.org/gems/jekyll-webp). -**This repo is an extended version of it's fork [`jekyll-webp`](https://github.com/sverrirs/jekyll-webp)** +**This repo is an extended version of it's fork [jekyll-webp](https://github.com/sverrirs/jekyll-webp)** ## Additional Features - Generate thumbnails in webp format From f931f96b5ab619f21deb43f55614ea3f783e79ae Mon Sep 17 00:00:00 2001 From: rohithzr Date: Wed, 19 Jul 2023 22:16:53 +0530 Subject: [PATCH 6/7] fix date issue --- jekyll-webp.gemspec | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jekyll-webp.gemspec b/jekyll-webp.gemspec index d85c9f3..02cc0af 100644 --- a/jekyll-webp.gemspec +++ b/jekyll-webp.gemspec @@ -1,11 +1,12 @@ # coding: utf-8 require_relative 'lib/jekyll-webp/version' +require "date" Gem::Specification.new do |spec| spec.name = "jekyll-webp" spec.version = Jekyll::Webp::VERSION spec.platform = Gem::Platform::RUBY - # spec.date = DateTime.now.strftime('%Y-%m-%d') + spec.date = DateTime.now.strftime('%Y-%m-%d') spec.authors = ["Sverrir Sigmundarson"] spec.email = ["jekyll@sverrirs.com"] spec.homepage = "https://github.com/sverrirs/jekyll-webp" From b478008da0356fa28670252e110d43102ad3f4f0 Mon Sep 17 00:00:00 2001 From: rohithzr Date: Wed, 19 Jul 2023 22:22:24 +0530 Subject: [PATCH 7/7] add fastimage to dep --- jekyll-webp.gemspec | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/jekyll-webp.gemspec b/jekyll-webp.gemspec index 02cc0af..dbb566c 100644 --- a/jekyll-webp.gemspec +++ b/jekyll-webp.gemspec @@ -20,9 +20,11 @@ Gem::Specification.new do |spec| spec.test_files = spec.files.grep(%r{^spec/}) spec.require_paths = ["lib"] + spec.add_dependency "fastimage", '>= 2.0.0' + spec.add_development_dependency "jekyll", "~> 3.0" spec.add_development_dependency "bundler", "~> 1.5" spec.add_development_dependency "rake", "~> 1.5" spec.add_development_dependency "minitest", '~> 5.4', '>= 5.4.3' - spec.add_development_dependency "fastimage", '>= 2.0.0' + end \ No newline at end of file