From 3ee9921f2d2eaa0b46f6bb906b9a163590611b08 Mon Sep 17 00:00:00 2001 From: Bob Trahan Date: Tue, 29 Jan 2013 16:52:39 -0800 Subject: [PATCH] improve image hinting for 220 preview Summary: break out the calculation of dimensions as a static method and use it Test Plan: made a conpherence with many images and noted i auto-scrolled to the bottom correctly Reviewers: chad, epriestley Reviewed By: epriestley CC: aran, Korvin Maniphest Tasks: T2399 Differential Revision: https://secure.phabricator.com/D4733 --- .../files/PhabricatorImageTransformer.php | 30 ++++++++++++++++--- .../rule/PhabricatorRemarkupRuleEmbedFile.php | 5 +++- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/applications/files/PhabricatorImageTransformer.php b/src/applications/files/PhabricatorImageTransformer.php index 173b92b6c9..0b08c78285 100644 --- a/src/applications/files/PhabricatorImageTransformer.php +++ b/src/applications/files/PhabricatorImageTransformer.php @@ -116,7 +116,7 @@ final class PhabricatorImageTransformer { return $dst; } - private function generatePreview(PhabricatorFile $file, $size) { + public static function getPreviewDimensions(PhabricatorFile $file, $size) { $data = $file->loadFileData(); $src = imagecreatefromstring($data); @@ -128,13 +128,35 @@ final class PhabricatorImageTransformer { $dx = max($size / 4, $scale * $x); $dy = max($size / 4, $scale * $y); + $sdx = $scale * $x; + $sdy = $scale * $y; + + return array( + 'x' => $x, + 'y' => $y, + 'dx' => $dx, + 'dy' => $dy, + 'sdx' => $sdx, + 'sdy' => $sdy + ); + } + + private function generatePreview(PhabricatorFile $file, $size) { + $data = $file->loadFileData(); + $src = imagecreatefromstring($data); + + $dimensions = self::getPreviewDimensions($file, $size); + $x = $dimensions['x']; + $y = $dimensions['y']; + $dx = $dimensions['dx']; + $dy = $dimensions['dy']; + $sdx = $dimensions['sdx']; + $sdy = $dimensions['sdy']; + $dst = imagecreatetruecolor($dx, $dy); imagesavealpha($dst, true); imagefill($dst, 0, 0, imagecolorallocatealpha($dst, 255, 255, 255, 127)); - $sdx = $scale * $x; - $sdy = $scale * $y; - imagecopyresampled( $dst, $src, diff --git a/src/infrastructure/markup/rule/PhabricatorRemarkupRuleEmbedFile.php b/src/infrastructure/markup/rule/PhabricatorRemarkupRuleEmbedFile.php index 4aa8938618..31ec888b21 100644 --- a/src/infrastructure/markup/rule/PhabricatorRemarkupRuleEmbedFile.php +++ b/src/infrastructure/markup/rule/PhabricatorRemarkupRuleEmbedFile.php @@ -68,7 +68,10 @@ final class PhabricatorRemarkupRuleEmbedFile case 'thumb': default: $attrs['src'] = $file->getPreview220URI(); - $attrs['width'] = '220'; + $dimensions = + PhabricatorImageTransformer::getPreviewDimensions($file, 220); + $attrs['width'] = $dimensions['sdx']; + $attrs['height'] = $dimensions['sdy']; $options['image_class'] = 'phabricator-remarkup-embed-image'; break; }