From a7c996c657a370884ca0c5898d59a9fa54c44c21 Mon Sep 17 00:00:00 2001 From: Claudinei Machado Date: Tue, 12 Jan 2016 17:56:43 -0200 Subject: [PATCH 1/3] Fixed bug getimagesize() with url, not image path --- Service/ImageHelper.php | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/Service/ImageHelper.php b/Service/ImageHelper.php index 51fcf6f..af7f428 100644 --- a/Service/ImageHelper.php +++ b/Service/ImageHelper.php @@ -55,24 +55,49 @@ public function getUrl($filename, $subdir) return $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath() . $this->container->getParameter('fbeen_croppic.upload.' . $subdir) . '/' . $filename; } + + + public function resolveFilePath($imgUrl) + { + $uploadDir = $this->container->getParameter('fbeen_croppic.upload.original'); + + list($base, $file) = explode($uploadDir, $imgUrl); + + $rootDir = $this->container->get('kernel')->getRootDir() . '/../web'; + + return $rootDir . $uploadDir . $file; + } public function crop(Crop $crop) { - $what = getimagesize($crop->getImgUrl()); + // Bug fix + $imgUrl = $crop->getImgUrl(); + $filepath = $this->resolveFilePath($imgUrl); + + $what = getimagesize($filepath); switch(strtolower($what['mime'])) { case 'image/png': - $img_r = imagecreatefrompng($crop->getImgUrl()); - $source_image = imagecreatefrompng($crop->getImgUrl()); + /*$img_r = imagecreatefrompng($crop->getImgUrl()); + $source_image = imagecreatefrompng($crop->getImgUrl());*/ + + $img_r = imagecreatefrompng($filepath); + $source_image = imagecreatefrompng($filepath); break; case 'image/jpeg': - $img_r = imagecreatefromjpeg($crop->getImgUrl()); - $source_image = imagecreatefromjpeg($crop->getImgUrl()); + /*$img_r = imagecreatefromjpeg($crop->getImgUrl()); + $source_image = imagecreatefromjpeg($crop->getImgUrl());*/ + + $img_r = imagecreatefromjpeg($filepath); + $source_image = imagecreatefromjpeg($filepath); break; case 'image/gif': - $img_r = imagecreatefromgif($crop->getImgUrl()); - $source_image = imagecreatefromgif($crop->getImgUrl()); + /*$img_r = imagecreatefromgif($crop->getImgUrl()); + $source_image = imagecreatefromgif($crop->getImgUrl());*/ + + $img_r = imagecreatefromgif($filepath); + $source_image = imagecreatefromgif($filepath); break; default: return FALSE; From bba275499a847e3777501616496a49ac669d8770 Mon Sep 17 00:00:00 2001 From: Claudinei Machado Date: Tue, 12 Jan 2016 18:34:24 -0200 Subject: [PATCH 2/3] Fefactored resolveFilepath function --- Service/ImageHelper.php | 46 +++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/Service/ImageHelper.php b/Service/ImageHelper.php index af7f428..6afda07 100644 --- a/Service/ImageHelper.php +++ b/Service/ImageHelper.php @@ -56,46 +56,42 @@ public function getUrl($filename, $subdir) return $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath() . $this->container->getParameter('fbeen_croppic.upload.' . $subdir) . '/' . $filename; } - - public function resolveFilePath($imgUrl) + /** + * @param $imgUrl + * @return string + */ + public function resolveFilepath($imgUrl) { - $uploadDir = $this->container->getParameter('fbeen_croppic.upload.original'); + $filepath = $this->container->getParameter('fbeen_croppic.upload.filepath'); + $original = $this->container->getParameter('fbeen_croppic.upload.original'); + + $firstToken = strpos($imgUrl, $original); - list($base, $file) = explode($uploadDir, $imgUrl); + if(false == $firstToken) + return $imgUrl; - $rootDir = $this->container->get('kernel')->getRootDir() . '/../web'; + $baseFilepath = substr($imgUrl, $firstToken+strlen($original)); - return $rootDir . $uploadDir . $file; + return $filepath . $original .$baseFilepath; } - + public function crop(Crop $crop) { - // Bug fix - $imgUrl = $crop->getImgUrl(); - $filepath = $this->resolveFilePath($imgUrl); + $filepath = $this->resolveFilepath($crop->getImgUrl()); $what = getimagesize($filepath); switch(strtolower($what['mime'])) { case 'image/png': - /*$img_r = imagecreatefrompng($crop->getImgUrl()); - $source_image = imagecreatefrompng($crop->getImgUrl());*/ - $img_r = imagecreatefrompng($filepath); $source_image = imagecreatefrompng($filepath); break; case 'image/jpeg': - /*$img_r = imagecreatefromjpeg($crop->getImgUrl()); - $source_image = imagecreatefromjpeg($crop->getImgUrl());*/ - $img_r = imagecreatefromjpeg($filepath); $source_image = imagecreatefromjpeg($filepath); break; case 'image/gif': - /*$img_r = imagecreatefromgif($crop->getImgUrl()); - $source_image = imagecreatefromgif($crop->getImgUrl());*/ - $img_r = imagecreatefromgif($filepath); $source_image = imagecreatefromgif($filepath); break; @@ -106,28 +102,28 @@ public function crop(Crop $crop) // resize the original image to size of editor $resizedImage = imagecreatetruecolor($crop->getImgW(), $crop->getImgH()); imagecopyresampled($resizedImage, $source_image, 0, 0, 0, 0, $crop->getImgW(), $crop->getImgH(), $crop->getImgInitW(), $crop->getImgInitH()); - + // rotate the rezized image $rotated_image = imagerotate($resizedImage, -$crop->getRotation(), 0); - + // find new width & height of rotated image $rotated_width = imagesx($rotated_image); $rotated_height = imagesy($rotated_image); - + // diff between rotated & original sizes $dx = $rotated_width - $crop->getImgW(); $dy = $rotated_height - $crop->getImgH(); - + // crop rotated image to fit into original rezized rectangle $cropped_rotated_image = imagecreatetruecolor($crop->getImgW(), $crop->getImgH()); imagecolortransparent($cropped_rotated_image, imagecolorallocate($cropped_rotated_image, 0, 0, 0)); imagecopyresampled($cropped_rotated_image, $rotated_image, 0, 0, $dx / 2, $dy / 2, $crop->getImgW(), $crop->getImgH(), $crop->getImgW(), $crop->getImgH()); - + // crop image into selected area $final_image = imagecreatetruecolor($crop->getCropW(), $crop->getCropH()); imagecolortransparent($final_image, imagecolorallocate($final_image, 0, 0, 0)); imagecopyresampled($final_image, $cropped_rotated_image, 0, 0, $crop->getImgX1(), $crop->getImgY1(), $crop->getCropW(), $crop->getCropH(), $crop->getCropW(), $crop->getCropH()); - + // finally output png image imagejpeg($final_image, $this->getPath(basename($crop->getImgUrl()), 'cropped'), 100); } From 906298f3d4bbf2c9c965eb9ceb6b0c352af0c695 Mon Sep 17 00:00:00 2001 From: Claudinei Machado Date: Tue, 12 Jan 2016 18:43:48 -0200 Subject: [PATCH 3/3] Refactored function resolveFilepath() --- Service/ImageHelper.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Service/ImageHelper.php b/Service/ImageHelper.php index 6afda07..7d0a6fb 100644 --- a/Service/ImageHelper.php +++ b/Service/ImageHelper.php @@ -75,6 +75,10 @@ public function resolveFilepath($imgUrl) return $filepath . $original .$baseFilepath; } + /** + * @param Crop $crop + * @return bool + */ public function crop(Crop $crop) { $filepath = $this->resolveFilepath($crop->getImgUrl());