From 945c3083c24ae828d3be5e6f7af9c7be0c782eec Mon Sep 17 00:00:00 2001 From: Alexey Pavlov Date: Thu, 9 Oct 2014 13:29:58 +0400 Subject: [PATCH 1/4] add option jpeg_quality for cropped thumbs --- Controller/UploadController.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Controller/UploadController.php b/Controller/UploadController.php index 0fe3db6e..d499a618 100644 --- a/Controller/UploadController.php +++ b/Controller/UploadController.php @@ -196,7 +196,8 @@ public function cropImageAction(Request $request $thumbName = $maxW.'x'.$maxH.'-'.$imageName; $thumbSrc = $thumbDir . $thumbName; - $this->resizeCropImage($thumbSrc, $destSrc, 0, 0, 0, 0, $w, $h, $destW, $destH); + $jpeg_quality = isset($thumb['jpeg_quality']) ? $thumb['jpeg_quality'] : 90; + $this->resizeCropImage($thumbSrc, $destSrc, 0, 0, 0, 0, $w, $h, $destW, $destH, $jpeg_quality); if(isset($thumb['useAsFieldImage']) && $thumb['useAsFieldImage']){ $previewSrc = '/'.$config['uploadConfig']['webDir'] . '/' . $this->container->getParameter('comur_image.cropped_image_dir') . '/'. $this->container->getParameter('comur_image.thumbs_dir'). '/' . $thumbName; } @@ -289,7 +290,7 @@ public function getLibraryImagesAction(Request $request){ /** * Crops or resizes image and writes it on disk */ - private function resizeCropImage($destSrc, $imgSrc, $destX, $destY, $srcX, $srcY, $destW, $destH, $srcW, $srcH) + private function resizeCropImage($destSrc, $imgSrc, $destX, $destY, $srcX, $srcY, $destW, $destH, $srcW, $srcH, $jpeg_quality = 90) { $type = strtolower(pathinfo($imgSrc, PATHINFO_EXTENSION)); @@ -298,7 +299,7 @@ private function resizeCropImage($destSrc, $imgSrc, $destX, $destY, $srcX, $srcY case 'jpeg': $srcFunc = 'imagecreatefromjpeg'; $writeFunc = 'imagejpeg'; - $imageQuality = 100; + $imageQuality = $jpeg_quality; break; case 'gif': $srcFunc = 'imagecreatefromgif'; From 240f4b51f9869c1aa32d26e05f72f01f6aac1133 Mon Sep 17 00:00:00 2001 From: Alexey Pavlov Date: Thu, 9 Oct 2014 16:29:55 +0400 Subject: [PATCH 2/4] add jpeg_quality option to global config (config.yml) add jpegQuality option to cropConfig (default for all thumbs) and to cropConfig.thumbs items (personal quality for separate thumb) --- Controller/UploadController.php | 8 +++++--- DependencyInjection/ComurImageExtension.php | 1 + DependencyInjection/Configuration.php | 1 + 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Controller/UploadController.php b/Controller/UploadController.php index d499a618..5c07e4c4 100644 --- a/Controller/UploadController.php +++ b/Controller/UploadController.php @@ -112,6 +112,7 @@ public function cropImageAction(Request $request $tarH = (int) round($config['cropConfig']['minHeight']); $forceResize = $config['cropConfig']['forceResize']; + $defaultJpegQuality = $config['cropConfig']['jpeg_quality']; // $disableCrop = $config['cropConfig']['disableCrop']; $uploadUrl = urldecode($config['uploadConfig']['uploadUrl']); @@ -154,7 +155,8 @@ public function cropImageAction(Request $request } - $this->resizeCropImage($destSrc,$src,0,0,$x,$y,$destW,$destH,$w,$h); + $jpegQuality = isset($config['cropConfig']['jpeg_quality']) ? $config['cropConfig']['jpeg_quality'] : $defaultJpegQuality; + $this->resizeCropImage($destSrc,$src,0,0,$x,$y,$destW,$destH,$w,$h,$jpegQuality); $galleryThumbOk = false; $isGallery = isset($config['uploadConfig']['isGallery']) ? $config['uploadConfig']['isGallery'] : false; @@ -196,8 +198,8 @@ public function cropImageAction(Request $request $thumbName = $maxW.'x'.$maxH.'-'.$imageName; $thumbSrc = $thumbDir . $thumbName; - $jpeg_quality = isset($thumb['jpeg_quality']) ? $thumb['jpeg_quality'] : 90; - $this->resizeCropImage($thumbSrc, $destSrc, 0, 0, 0, 0, $w, $h, $destW, $destH, $jpeg_quality); + $thumbJpegQuality = isset($thumb['jpeg_quality']) ? $thumb['jpeg_quality'] : $jpegQuality; + $this->resizeCropImage($thumbSrc, $destSrc, 0, 0, 0, 0, $w, $h, $destW, $destH, $thumbJpegQuality); if(isset($thumb['useAsFieldImage']) && $thumb['useAsFieldImage']){ $previewSrc = '/'.$config['uploadConfig']['webDir'] . '/' . $this->container->getParameter('comur_image.cropped_image_dir') . '/'. $this->container->getParameter('comur_image.thumbs_dir'). '/' . $thumbName; } diff --git a/DependencyInjection/ComurImageExtension.php b/DependencyInjection/ComurImageExtension.php index d5ce2265..dfeae015 100644 --- a/DependencyInjection/ComurImageExtension.php +++ b/DependencyInjection/ComurImageExtension.php @@ -32,5 +32,6 @@ public function load(array $configs, ContainerBuilder $container) $container->setParameter('comur_image.gallery_thumb_size', $config['config']['gallery_thumb_size']); $container->setParameter('comur_image.web_dirname', $config['config']['web_dirname']); $container->setParameter('comur_image.translation_domain', $config['config']['translation_domain']); + $container->setParameter('comur_image.jpeg_quality', $config['config']['jpeg_quality']); } } diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index e85ebf14..9d501edc 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -32,6 +32,7 @@ public function getConfigTreeBuilder() ->scalarNode('gallery_thumb_size')->defaultValue(150)->cannotBeEmpty()->end() ->scalarNode('web_dirname')->defaultValue('web')->cannotBeEmpty()->end() ->scalarNode('translation_domain')->defaultValue('ComurImageBundle')->cannotBeEmpty()->end() + ->scalarNode('jpeg_quality')->defaultValue(90)->cannotBeEmpty()->end() ->end() ->end() ->end() From 25b756d6b2d454c80af4834d02715d8fd18e7c27 Mon Sep 17 00:00:00 2001 From: Alexey Pavlov Date: Thu, 9 Oct 2014 16:45:17 +0400 Subject: [PATCH 3/4] update documentation - add jpeg_quality option --- README.md | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/README.md b/README.md index 97b189f7..20f5cab2 100644 --- a/README.md +++ b/README.md @@ -122,6 +122,7 @@ Configuration translation_domain: 'ComurImageBundle' gallery_thumb_size: 150 gallery_dir: 'gallery' + jpeg_quality: 90 ###cropped_image_dir### @@ -165,6 +166,10 @@ That's the gallery directory name. The widget will store all gallery images in a **For eg.** if you put 'uploads/images' as webDir when you add the widget, gallery images will be stored in 'uploads/images/*[gallery_dir]*'. This is added to make gallery use easier so you don't have to add new functions to your entities to get gallery dirs. +###jpeg_quality### + +That's the quality of jpeg. It will be applied to all cropped images (and thumbs), if their aren't have own quality option. + #Usage# @@ -262,6 +267,52 @@ To save original image path, you have to create another field and name it same a I will put a demo soon… +Setting JPEG quality of cropped images +------------ + +If your field definition doesn't have specified value, then its param will be get from global option (from config.yml) or set to default value (`90`). + +But you may set jpegQuality option for any field and even for any separate thumb: + + public function buildForm(FormBuilderInterface $builder, array $options) + { + // get your entity related with your form type + $myEntity = $builder->getForm()->getData(); + ... + ->add('image', 'comur_image', array( + 'uploadConfig' => array( + 'uploadRoute' => 'comur_api_upload', //optional + 'uploadUrl' => $myEntity->getUploadRootDir(), // required + 'webDir' => $myEntity->getUploadDir(), // required + 'fileExt' => '*.jpg;*.gif;*.png;*.jpeg', //optional + 'libraryDir' => null, //optional + 'libraryRoute' => 'comur_api_image_library', //optional + 'showLibrary' => true, //optional + 'saveOriginal' => 'originalImage' //optional + ), + 'cropConfig' => array( + 'minWidth' => 588, + 'minHeight' => 300, + 'aspectRatio' => true, //optional + 'cropRoute' => 'comur_api_crop', //optional + 'forceResize' => false, //optional + 'jpegQuality' => 75, //optional, set quality for all thumbs of this field + 'thumbs' => array( //optional + array( + 'maxWidth' => 180, + 'maxHeight' => 400, + 'useAsFieldImage' => true //optional + ), + array( + 'maxWidth' => 180, + 'maxHeight' => 400, + 'jpegQuality' => 60 // override quality for this thumb + ) + ) + ) + )) + + Gallery widget ------------ From c2d1eb0e3d5d8052f7db6faa97fac25258079943 Mon Sep 17 00:00:00 2001 From: Alexey Pavlov Date: Sat, 11 Oct 2014 19:04:41 +0400 Subject: [PATCH 4/4] fix default jpeg_quality --- Controller/UploadController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Controller/UploadController.php b/Controller/UploadController.php index 5c07e4c4..4e29cc66 100644 --- a/Controller/UploadController.php +++ b/Controller/UploadController.php @@ -112,7 +112,7 @@ public function cropImageAction(Request $request $tarH = (int) round($config['cropConfig']['minHeight']); $forceResize = $config['cropConfig']['forceResize']; - $defaultJpegQuality = $config['cropConfig']['jpeg_quality']; + $default_jpeg_quality = $this->container->getParameter('comur_image.jpeg_quality'); // $disableCrop = $config['cropConfig']['disableCrop']; $uploadUrl = urldecode($config['uploadConfig']['uploadUrl']);