{"id":50171,"date":"2017-07-10T16:34:41","date_gmt":"2017-07-10T11:04:41","guid":{"rendered":"http:\/\/www.tothenew.com\/blog\/?p=50171"},"modified":"2017-07-11T12:39:23","modified_gmt":"2017-07-11T07:09:23","slug":"image-optimization-using-jpegtran-with-aws-lambda","status":"publish","type":"post","link":"https:\/\/www.tothenew.com\/blog\/image-optimization-using-jpegtran-with-aws-lambda\/","title":{"rendered":"Image Optimization Using Jpegtran with AWS Lambda"},"content":{"rendered":"<p>Image optimization is an important thing when designing a website. Through image optimization using the open source Jpegtran, one can reduce their image size while preserving\u00a0their visual quality, which is also known as <a href=\"https:\/\/en.wikipedia.org\/wiki\/Lossless_compression\">lossless compression<\/a>. This results in saving many bytes or KB. Upgraded pictures utilizing Jpegtran likewise increment PageSpeed positioning in Google. Jpegtran mainly works on lossless compression with no effect on image quality.<\/p>\n<p><strong>Prerequisite:<\/strong><\/p>\n<p>Jpegtran can be installed in both ways i.e. using the source as well as using Yum or apt-get.<\/p>\n<p>The source code is available <a href=\"http:\/\/jpegclub.org\/jpegtran\/\">here<\/a>.<\/p>\n<p>apt-get install libjpeg-progs<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-50177\" src=\"\/blog\/wp-ttn-blog\/uploads\/2017\/07\/Jpegtrans-1.png\" alt=\"Jpegtrans\" width=\"1286\" height=\"272\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2017\/07\/Jpegtrans-1.png 1286w, \/blog\/wp-ttn-blog\/uploads\/2017\/07\/Jpegtrans-1-300x63.png 300w, \/blog\/wp-ttn-blog\/uploads\/2017\/07\/Jpegtrans-1-1024x216.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2017\/07\/Jpegtrans-1-624x131.png 624w\" sizes=\"(max-width: 1286px) 100vw, 1286px\" \/><\/p>\n<p><strong>Use Case<\/strong>: I was approached to enhance the pictures for one of our application which was running in Drupal. All the images were stored directly on <a title=\"Amazon S3 Bucket Lifecycle\" href=\"http:\/\/www.tothenew.com\/blog\/amazon-s3-bucket-lifecycle\/\">AWS S3 bucket<\/a> and had to optimize the images on the fly. In <a title=\"Drupal Development\" href=\"http:\/\/www.tothenew.com\/wcm\/drupal-development-consulting-services\">Drupal<\/a>, we can utilize ImageMagic, which is likewise one of the best advancement instrument for pictures, yet we need to fine grain the pictures to <a title=\"9 Performance Optimization Techniques You Should Know\" href=\"http:\/\/www.tothenew.com\/blog\/thinking-mobile-first-9-performance-optimization-techniques-you-should-know\/\">accomplish great positioning in PageSpeed<\/a>.<\/p>\n<p><strong>Jpegtran Description of options<\/strong>:<\/p>\n<p><strong>&#8211; Copy the:<\/strong> Copy no extra markers from the source file. This setting suppresses all comments and other excess baggage present in the source file.<br \/>\n<b>&#8211; O<\/b><strong>ptimize<\/strong>: Perform optimization of entropy encoding parameters.<br \/>\n<b>&#8211; P<\/b><strong>rogressive<\/strong>: Create progressive JPEG file.<br \/>\n<b>&#8211; O<\/b><strong>utfile name<\/strong>: Specify a \u00a0name for the output file.<\/p>\n<p><strong>How to use<\/strong>:<\/p>\n<p>Jpegtran can be used in one file as well as in multiple files without changing the name of the original file.<\/p>\n<p><strong>jpegtran -copy none -optimize -outfile file.jpg file.jpg<\/strong><\/p>\n<p><strong>Before Optimizing images:<\/strong><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignleft wp-image-50186 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2017\/07\/before-optimization.png\" alt=\"before-optimization\" width=\"502\" height=\"47\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2017\/07\/before-optimization.png 502w, \/blog\/wp-ttn-blog\/uploads\/2017\/07\/before-optimization-300x28.png 300w\" sizes=\"(max-width: 502px) 100vw, 502px\" \/><\/p>\n<p><strong>After optimization:<\/strong><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignleft wp-image-50190 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2017\/07\/After-Optimization.png\" alt=\"After-Optimization\" width=\"616\" height=\"53\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2017\/07\/After-Optimization.png 616w, \/blog\/wp-ttn-blog\/uploads\/2017\/07\/After-Optimization-300x25.png 300w\" sizes=\"(max-width: 616px) 100vw, 616px\" \/><\/p>\n<p>Before optimizing the image size, it was 600K and after using Jpegtran, the size becomes 48K.<\/p>\n<p><b>Recursively optimize all image under folder:<\/b><\/p>\n<p>find \/home\/gaurav\/Gaurav\/imagesFolder\/ -name &#8220;*.jpg&#8221; -type f -exec jpegtran -copy none -optimize -outfile {} {} \\;<\/p>\n<p><b>How to use Image Optimization in AWS Lambda with S3 Bucket.<\/b><\/p>\n<p>Jpegtran can be used to optimize images on AWS S3 Bucket on GetObject of or Put. Any object with suffix jpg or jpeg can be optimized using <a title=\"Introduction To AWS LAMBDA\" href=\"http:\/\/www.tothenew.com\/blog\/introduction-to-aws-lambda\/\">AWS Lambda functionality<\/a>. The lambda function is written in Node js.<\/p>\n<p><span style=\"font-weight: 400;\">Below are the steps to create lambda function in AWS.<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Login into your AWS console.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Create <\/span><b>S3 Bucket<\/b><span style=\"font-weight: 400;\"> in the same Region where Lambda function will use.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Create IAM role to allow Lambda function to have full access to S3 bucket and Cloud watch.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">IMA -&gt; Roles -&gt; CreateNewRole-&gt;Select AWS Lambda -&gt; Select AmazonS3FullAccess and \u00a0CloudWatchEventsFullAccess\u00a0<img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-50193 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2017\/07\/Lambda-fucntion.png\" alt=\"Lambda-fucntion\" width=\"1283\" height=\"340\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2017\/07\/Lambda-fucntion.png 1283w, \/blog\/wp-ttn-blog\/uploads\/2017\/07\/Lambda-fucntion-300x79.png 300w, \/blog\/wp-ttn-blog\/uploads\/2017\/07\/Lambda-fucntion-1024x271.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2017\/07\/Lambda-fucntion-624x165.png 624w\" sizes=\"(max-width: 1283px) 100vw, 1283px\" \/><\/span><\/li>\n<li style=\"font-weight: 400;\"><strong><span style=\"font-weight: 400;\">Select Lambda service and create Lambda function.<\/span><\/strong><\/li>\n<li style=\"font-weight: 400;\"><strong><span style=\"font-weight: 400;\">Under Select blueprint -&gt; Select Node.js 6.10 and filter S3-get-object<\/span><\/strong><\/li>\n<li style=\"font-weight: 400;\"><strong><span style=\"font-weight: 400;\">Bucket &#8211; select Bucket Name<\/span><\/strong><\/li>\n<li style=\"font-weight: 400;\"><strong><span style=\"font-weight: 400;\">Event Type &#8211; Put<\/span><\/strong><\/li>\n<li style=\"font-weight: 400;\"><strong><span style=\"font-weight: 400;\">Enable trigger &#8211; Select check box.<\/span><\/strong><img decoding=\"async\" loading=\"lazy\" class=\"alignleft wp-image-50196 size-full\" src=\"\/blog\/wp-ttn-blog\/uploads\/2017\/07\/lambda-function-2.png\" alt=\"lambda-function-2\" width=\"1280\" height=\"648\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2017\/07\/lambda-function-2.png 1280w, \/blog\/wp-ttn-blog\/uploads\/2017\/07\/lambda-function-2-300x151.png 300w, \/blog\/wp-ttn-blog\/uploads\/2017\/07\/lambda-function-2-1024x518.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2017\/07\/lambda-function-2-624x315.png 624w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/li>\n<\/ol>\n<p>10. <strong><span style=\"font-weight: 400;\">Upload the Zip compress code which is available on my Git Repo <\/span><span style=\"font-weight: 400;\"><a href=\"https:\/\/github.com\/gauravrishi168\/Jpegtran\">Download<\/a><\/span><\/strong><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-50199\" src=\"\/blog\/wp-ttn-blog\/uploads\/2017\/07\/lambda-function-3.png\" alt=\"lambda-function-3\" width=\"969\" height=\"643\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2017\/07\/lambda-function-3.png 969w, \/blog\/wp-ttn-blog\/uploads\/2017\/07\/lambda-function-3-300x199.png 300w, \/blog\/wp-ttn-blog\/uploads\/2017\/07\/lambda-function-3-624x414.png 624w\" sizes=\"(max-width: 969px) 100vw, 969px\" \/><\/p>\n<p>11.\u00a0Under Lambda function handler and role:<\/p>\n<p>a. Handler* Index.handler<\/p>\n<p>b. Role* Choose an existing role<\/p>\n<p><strong><span style=\"font-weight: 400;\">c. Existing role* <\/span><b>name of function<\/b><\/strong><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-50206\" src=\"\/blog\/wp-ttn-blog\/uploads\/2017\/07\/lambda-function-4.png\" alt=\"lambda-function-4\" width=\"997\" height=\"215\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2017\/07\/lambda-function-4.png 997w, \/blog\/wp-ttn-blog\/uploads\/2017\/07\/lambda-function-4-300x64.png 300w, \/blog\/wp-ttn-blog\/uploads\/2017\/07\/lambda-function-4-624x134.png 624w\" sizes=\"(max-width: 997px) 100vw, 997px\" \/><\/p>\n<p>12.\u00a0<strong><span style=\"font-weight: 400;\">Create Function<\/span><\/strong><\/p>\n<p>13.\u00a0<span style=\"font-weight: 400;\">Now upload any image on S3 and lambda function will optimize those images on <\/span>runtime.\u00a0The actual size of the image in 608K and after uploading on S3 the images size become 42K.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-50207\" src=\"\/blog\/wp-ttn-blog\/uploads\/2017\/07\/Lambda-Function-4.png\" alt=\"Lambda-Function-4\" width=\"476\" height=\"460\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2017\/07\/Lambda-Function-4.png 476w, \/blog\/wp-ttn-blog\/uploads\/2017\/07\/Lambda-Function-4-300x289.png 300w\" sizes=\"(max-width: 476px) 100vw, 476px\" \/><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-50209\" src=\"\/blog\/wp-ttn-blog\/uploads\/2017\/07\/Lambda-function-6.png\" alt=\"Lambda-function-6\" width=\"1198\" height=\"412\" srcset=\"\/blog\/wp-ttn-blog\/uploads\/2017\/07\/Lambda-function-6.png 1198w, \/blog\/wp-ttn-blog\/uploads\/2017\/07\/Lambda-function-6-300x103.png 300w, \/blog\/wp-ttn-blog\/uploads\/2017\/07\/Lambda-function-6-1024x352.png 1024w, \/blog\/wp-ttn-blog\/uploads\/2017\/07\/Lambda-function-6-624x214.png 624w\" sizes=\"(max-width: 1198px) 100vw, 1198px\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Image optimization is an important thing when designing a website. Through image optimization using the open source Jpegtran, one can reduce their image size while preserving\u00a0their visual quality, which is also known as lossless compression. This results in saving many bytes or KB. Upgraded pictures utilizing Jpegtran likewise increment PageSpeed positioning in Google. Jpegtran mainly [&hellip;]<\/p>\n","protected":false},"author":1168,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":14},"categories":[1174,2348,3602,1185],"tags":[248,2366,1679,4862,4646,1124,1177,1276],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/50171"}],"collection":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/users\/1168"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/comments?post=50171"}],"version-history":[{"count":0,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/50171\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/media?parent=50171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/categories?post=50171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/tags?post=50171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}