From 4c3d0cd7a49ed26566b7876d583c970d08fd2325 Mon Sep 17 00:00:00 2001 From: Michael Ang Date: Thu, 5 May 2011 00:09:39 +0000 Subject: [PATCH] Function to get region params as float --- .../datanode/BookReaderImages.inc.php | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/BookReaderIA/datanode/BookReaderImages.inc.php b/BookReaderIA/datanode/BookReaderImages.inc.php index 9957b40..5e09445 100644 --- a/BookReaderIA/datanode/BookReaderImages.inc.php +++ b/BookReaderIA/datanode/BookReaderImages.inc.php @@ -922,6 +922,38 @@ class BookReaderImages return array('x' => $sourceX, 'y' => $sourceY, 'w' => $sourceWidth, 'h' => $sourceHeight); } + + function getRegionDimensionsAsFloat($sourceDimensions, $regionDimensions) { + // Return region dimensions as { 'x' => xOffset, 'y' => yOffset, 'w' => width, 'h' => height } + // in terms of full resolution image. + // Note: this will clip the returned dimensions to fit within the source image + + $sourceX = 0; + if (array_key_exists('x', $regionDimensions)) { + $sourceX = floatAmount($regionDimensions['x'], $sourceDimensions['width']); + } + $sourceX = $this->clamp(0.0, 1.0, $sourceX); + + $sourceY = 0; + if (array_key_exists('y', $regionDimensions)) { + $sourceY = floatAmount($regionDimensions['y'], $sourceDimensions['height']); + } + $sourceY = $this->clamp(0.0, 1.0, $sourceY); // Allow at least one pixel + + $sourceWidth = $sourceDimensions['width'] - $sourceX; + if (array_key_exists('w', $regionDimensions)) { + $sourceWidth = floatAmount($regionDimensions['w'], $sourceDimensions['width']); + } + $sourceWidth = $this->clamp(0.0, 1.0, $sourceWidth); + + $sourceHeight = $sourceDimensions['height'] - $sourceY; + if (array_key_exists('h', $regionDimensions)) { + $sourceHeight = floatAmount($regionDimensions['h'], $sourceDimensions['height']); + } + $sourceHeight = $this->clamp(0.0, 1.0, $sourceHeight); + + return array('x' => $sourceX, 'y' => $sourceY, 'w' => $sourceWidth, 'h' => $sourceHeight); + } function intAmount($stringValue, $maximum) { // Returns integer amount for string like "5" (5 units) or "0.5" (50%) @@ -933,6 +965,17 @@ class BookReaderImages return floatval($stringValue) * $maximum + 0.5; } + function floatAmount($stringValue, $maximum) { + // Returns float amount (0.0 to 1.0) for string like "0.4" (40%) or "4" (40% if max is 10) + if (strpos($stringValue, ".") === false) { + // No decimal, assume int value out of maximum + return floatval($stringValue) / $maximum; + } + + // Given float - just pass through + return floatval($stringValue); + } + function clamp($minValue, $maxValue, $observedValue) { if ($observedValue < $minValue) { return $minValue; -- 2.20.1