/** * Returns an image manipulation library that is capable of handling the image file at $filePath -- will detect the image type and return the appropriate library from those available on the server * * @param string $filePath * @param bool $setInstanceFilePath * @return ISC_IMAGE_LIBRARY_INTERFACE * @throws ISC_IMAGE_LIBRARY_FACTORY_INVALIDIMAGEFILE_EXCEPTION If the image file at $filePath is not a valid image * @throws ISC_IMAGE_LIBRARY_FACTORY_NOPHPSUPPORT_EXCEPTION If there were no image libraries installed that could support the image */ public static function getImageLibraryInstance($filePath = null) { if ($filePath) { if (!file_exists($filePath)) { throw new ISC_IMAGE_LIBRARY_FACTORY_FILEDOESNTEXIST_EXCEPTION($filePath); } if (!self::isValidImageFile($filePath)) { throw new ISC_IMAGE_LIBRARY_FACTORY_INVALIDIMAGEFILE_EXCEPTION($filePath); } } // was going to use an array of classnames and call_user_func but it's a bit slow, and how often are libraries added? rarely // use direct calls instead try { if (ISC_IMAGE_LIBRARY_IMAGICK::isLibrarySupported() && (!$filePath || ISC_IMAGE_LIBRARY_IMAGICK::isFileSupported($filePath))) { $instance = new ISC_IMAGE_LIBRARY_IMAGICK($filePath); } else if (ISC_IMAGE_LIBRARY_GD::isLibrarySupported() && (!$filePath || ISC_IMAGE_LIBRARY_GD::isFileSupported($filePath))) { $instance = new ISC_IMAGE_LIBRARY_GD($filePath); } else { throw new ISC_IMAGE_LIBRARY_FACTORY_NOPHPSUPPORT_EXCEPTION($filePath); } } catch (ISC_IMAGE_BASECLASS_INVALIDIMAGE_EXCEPTION $exception) { throw new ISC_IMAGE_LIBRARY_FACTORY_INVALIDIMAGEFILE_EXCEPTION($filePath); } return $instance; }
/** * Overlay another GD resource onto the current scratch at the given offset * * @param ISC_IMAGE_LIBRARY_GD $image * @param mixed $offsetX * @param mixed $offsetY */ public function overlayImage(ISC_IMAGE_LIBRARY_GD $image, $offsetX, $offsetY) { // when watermarking is implemented this may need to be re-examined for when gifs or 8bit pngs are used $overlayResource = $image->getScratchResource(); $overlayWidth = $image->getWidth(); $overlayHeight = $image->getHeight(); if ($offsetX < 0) { $offsetX = $this->getWidth() + $offsetX - $overlayWidth; } if ($offsetY < 0) { $offsetY = $this->getHeight() + $offsetY - $overlayHeight; } imagecopyresampled($this->getScratchResource(), $overlayResource, $offsetX, $offsetY, 0, 0, $overlayWidth, $overlayHeight, $overlayWidth, $overlayHeight); }