External image block
|
chopinhauer
Joined: 2004-06-21
Posts: 9 |
Posted: Sat, 2005-05-21 11:40
|
|
While adding the G2 image block to my site I noticed that the imageblock:External options are quite minimal. For example my original size pictures are all taken with a 4MPix camera so I cannot put them in an image block (it would be a waste of bandwidth for both the server the client) nor want I put just the thumbnail (cf. my Main Page for what I use image block for). Another misfeature is that 'fullSize' gives you the original image and not the preferred source, so pictures that are rotated look horrible. Personally I modified the ImageBlockHelper.class to select the preferred source if you give the 'fullSize' parameter. If you don't use 'fullSize' but you give a 'maxSize' it selects the biggest resize that matches the restriction (but maybe the smallest resize that is bigger than 'maxSize' would be more appropriate). I include the diff against beta3. Feel free to use it if you consider it useful. Piotr PS: Thank you for the great job with G2. Even if I know little of PHP, to modify the source code is very easy and intuitive.
Index: ImageBlockHelper.class
===================================================================
RCS file: /home/karwasz/cvsroot/karwasz.org/gallery2/modules/imageblock/classes/ImageBlockHelper.class,v
retrieving revision 1.1.1.2
retrieving revision 1.2
diff -r1.1.1.2 -r1.2
86c86,87
< $itemType, $order, $parentId, $fullSize);
---
> $itemType, $order, $parentId, $fullSize,
> (isset($params['maxSize']) ? $params['maxSize'] : 0));
131c132,133
< function _addBlock(&$blocks, $title, $itemType, $order, $parentId=null, $fullSize=false) {
---
> function _addBlock(&$blocks, $title, $itemType, $order, $parentId=null,
> $fullSize=false, $maxSize=false) {
238,239c240,260
< $image = $item;
< } else {
---
> list ($ret, $preferred) = GalleryCoreApi::fetchPreferredSource($item);
> if ($ret->isError()) {
> return GalleryStatus::success();
> }
> $image = $preferred;
> } else if ($maxSize) {
> list ($ret, $resizes) = GalleryCoreApi::fetchResizesByItemIds(array($id));
> if ($ret->isError()) {
> return $ret->wrap(__FILE__, __LINE__);
> }
>
> $bestSize = 0;
> foreach ($resizes[$id] as $resize) {
> $size = max($resize->getWidth(), $resize->getHeight());
> if (($size <= $maxSize) and ($size >= $bestSize)) {
> $image = $resize;
> $bestSize = $size;
> }
> }
> }
> if (!isset($image)) {
|
|

Posts: 1
Hi!
This is exactly what I need...
... any chance you have migrated this to v.2?
Thanx,
nonZero
Posts: 5
This is my first patch to Gallery2, thanks chopinhauer!
Gallery 2.1.2 core 1.1.0.2, ImageBlock 1.0.8
95c95,96 < $itemType, $order, $count, $parentId, $fullSize, --- > $itemType, $order, $count, $parentId, $fullSize, > isset($params['maxSize']) ? $params['maxSize'] : 0, 150c151 < $parentId=null, $fullSize=false, $userId=null) { --- > $parentId=null, $fullSize=false, $maxSize=false, $userId=null) { 268a270,299 > } else if (!$fullSize && $maxSize) { > list ($ret, $varSizes) = GalleryCoreApi::fetchResizesByItemIds(array($id)); > if ($ret) { > return array($ret->wrap(__FILE__, __LINE__), null); > } > if (isset($varSizes[$id])) { > $bestSize = 0; > $size = $maxSize; > foreach ($varSizes[$id] as $resize) { > $size = max($resize->getWidth(), $resize->getHeight()); > if (($size <= $maxSize) and ($size >= $bestSize)) { > $image = $resize; > $bestSize = $size; > } > } > } else { /* No resized version, fallback */ > list ($ret, $preferred) = GalleryCoreApi::fetchPreferredsByItemIds(array($id)); > if ($ret) { > return array($ret->wrap(__FILE__, __LINE__), null); > } > $image = isset($preferred[$id]) ? $preferred[$id] : $item; > $size = max($image->getWidth(), $image->getHeight()); > if ($size > $maxSize) { > list ($ret, $thumbnail) = GalleryCoreApi::fetchThumbnailsByItemIds(array($id)); > if ($ret) { > return array($ret->wrap(__FILE__, __LINE__), null); > } > $image = $thumbnail[$id]; > } > }[edit] Add code to deal with none resized version.
Note: Current code only works with Image mode
Posts: 5
It's hard for newcomers to get info about the api $parm...
Here comes the "error message free" update, only deals with 'GalleryDataItem', i.e. image only.
95c95,96 < $itemType, $order, $count, $parentId, $fullSize, --- > $itemType, $order, $count, $parentId, $fullSize, > isset($params['maxSize']) ? $params['maxSize'] : 0, 150c151 < $parentId=null, $fullSize=false, $userId=null) { --- > $parentId=null, $fullSize=false, $maxSize=false, $userId=null) { 268a270,290 > } else if (!$fullSize && $maxSize && GalleryUtilities::isA($item, 'GalleryDataItem')) { > list ($ret, $ReSizes) = GalleryCoreApi::fetchResizesByItemIds(array($id)); > if ($ret) { > return array($ret->wrap(__FILE__, __LINE__), null); > } > /* No resized version, fallback */ > if (!isset($ReSizes[$id])) { > list ($ret, $ReSizes) = GalleryCoreApi::fetchDerivativesByItemIds(array($id)); > if ($ret) { > return array($ret->wrap(__FILE__, __LINE__), null); > } > } > $bestSize = 0; > $size = $maxSize; > foreach ($ReSizes[$id] as $resize) { > $size = max($resize->getWidth(), $resize->getHeight()); > if (($size <= $maxSize) and ($size >= $bestSize)) { > $image = $resize; > $bestSize = $size; > } > }Posts: 5
Since I'm only good at copy & paste for minor functional mods, with minimal programming skills.
Can someone help me to understand how to get 'GalleryDataItem' from 'GalleryAlbumItem'?