Skip to content

Commit 3af4829

Browse files
committed
add zoom rule
1 parent f7a305a commit 3af4829

File tree

3 files changed

+52
-12
lines changed

3 files changed

+52
-12
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"keywords": ["image"],
55
"license": "MIT",
66
"require": {
7-
"php": "^7.1",
7+
"php": "^7.1",
88
"imagine/imagine": "^0.6",
99
"guzzlehttp/guzzle": "^6.2",
1010
"doctrine/cache": "^1.6"

src/ImageStack/Image.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public function getBinaryContent()
8484
// we consider that
8585
$options = array_replace($this->ephemeralImagineOptions, $this->imagineOptions);
8686
$binaryContent = $this->getImagineImage()->get(
87-
self::get_type_from_mime_type($mimeType),
87+
self::get_type_from_mime_type($mimeType),
8888
$options);
8989
$this->setBinaryContent($binaryContent, $mimeType);
9090
}

src/ImageStack/ImageManipulator/ThumbnailRule/PatternThumbnailRule.php

Lines changed: 50 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -109,16 +109,41 @@ protected function _thumbnailImage(ImageWithImagineInterface $image, ImagePathIn
109109
$image->deprecateBinaryContent();
110110
return true;
111111
}
112-
112+
113+
$formats = (array) $format;
114+
115+
$handlers = [
116+
[$this, 'handlerCrop'],
117+
[$this, 'handlerZoom'],
118+
];
119+
120+
foreach ($formats as $format) {
121+
$done = false;
122+
foreach ($handlers as $handler) {
123+
if (call_user_func($handler, $image, $format)) {
124+
$done = true;
125+
break;
126+
}
127+
}
128+
if (!$done) {
129+
throw new ThumbnailRuleException(sprintf('Unsupported rule format: %s', (string)$format), ThumbnailRuleException::UNSUPPORTED_RULE_FORMAT);
130+
}
131+
}
132+
133+
return true;
134+
}
135+
136+
protected function handlerCrop(ImageWithImagineInterface $image, $format)
137+
{
113138
if (preg_match('/^(\<)?([0-9]+)x([0-9]+)$/', $format, $matches)) {
114-
$size = new \Imagine\Image\Box($matches[2], $matches[3]);
115-
$mode = $matches[1] == '<' ? \Imagine\Image\ImageInterface::THUMBNAIL_INSET : \Imagine\Image\ImageInterface::THUMBNAIL_OUTBOUND;
116-
} elseif (preg_match('/^(\<)?([0-9]+)$/', $format, $matches)) {
117-
$size = new \Imagine\Image\Box($matches[2], $matches[2]);
118-
$mode = $matches[1] == '<' ? \Imagine\Image\ImageInterface::THUMBNAIL_INSET : \Imagine\Image\ImageInterface::THUMBNAIL_OUTBOUND;
119-
} else {
120-
throw new ThumbnailRuleException(sprintf('Unsupported rule format: %s', (string)$format), ThumbnailRuleException::UNSUPPORTED_RULE_FORMAT);
121-
}
139+
$size = new \Imagine\Image\Box($matches[2], $matches[3]);
140+
$mode = $matches[1] == '<' ? \Imagine\Image\ImageInterface::THUMBNAIL_INSET : \Imagine\Image\ImageInterface::THUMBNAIL_OUTBOUND;
141+
} elseif (preg_match('/^(\<)?([0-9]+)$/', $format, $matches)) {
142+
$size = new \Imagine\Image\Box($matches[2], $matches[2]);
143+
$mode = $matches[1] == '<' ? \Imagine\Image\ImageInterface::THUMBNAIL_INSET : \Imagine\Image\ImageInterface::THUMBNAIL_OUTBOUND;
144+
} else {
145+
return false;
146+
}
122147

123148
/** @var IImage $animated */
124149
$animated = null;
@@ -146,7 +171,22 @@ protected function _thumbnailImage(ImageWithImagineInterface $image, ImagePathIn
146171
return true;
147172
}
148173
$image->setImagineImage($image->getImagineImage()->thumbnail($size, $mode, $this->filter));
149-
return true;
174+
return true;
175+
}
176+
177+
protected function handlerZoom(ImageWithImagineInterface $image, $format)
178+
{
179+
if (preg_match('/^x([0-9]*\.?[0-9]+)$/', $format, $matches)) {
180+
$scale = floatval($matches[1]);
181+
$size = $image->getImagineImage()->getSize();
182+
$newSize = $size->scale($scale);
183+
$image->setImagineImage($image->getImagineImage()->resize($newSize)->crop(new \Imagine\Image\Point(
184+
max(0, ($newSize->getWidth() - $size->getWidth()) / 2),
185+
max(0, ($newSize->getHeight() - $size->getHeight()) / 2)
186+
), $size));
187+
return true;
188+
}
189+
return false;
150190
}
151191

152192
/**

0 commit comments

Comments
 (0)