+ function toBase64($rotate = false, $scaleWidth = 0, $scaleHeight = 0)
+ {
+ if(!preg_match('/^image\//', $this->mimetype)){
+ return false;
+ }
+
+ $file = $this->getStoreName();
+
+ if(!file_exists($file)){
+ return false;
+ }
+
+ $data = file_get_contents($file);
+
+ if(!empty($scaleWidth) || !empty($scaleHeight)){
+ $data = $this->scale(false, $scaleWidth, $scaleHeight);
+ }
+
+ if($rotate){
+ $data = $this->rotate($data);
+ }
+
+ $base64 = 'data:' . $this->mimetype . ';base64,' . base64_encode($data);
+
+ return $base64;
+ }
+
+ function getPdfPages($file)
+ {
+ require_once 'System.php';
+
+ $page = 0;
+
+ $pdfinfo = System::which('pdfinfo');
+
+ if (!file_exists($file) || empty($pdfinfo)) {
+ return $page;
+ }
+
+ $cmd = "{$pdfinfo} {$file}";
+
+ $ret = `$cmd`;
+
+ $info = explode("\n", $ret);
+
+ foreach ($info as $i){
+
+ if(!preg_match('/^Pages:[\s]*([0-9]+)/', $i, $matches)){
+ continue;
+ }
+
+ $page = (empty($matches[1])) ? 0 : $matches[1];
+ }
+
+ return $page;
+ }
+
+ function rotate($imageBlob = false)
+ {
+ if(empty($imageBlob)){
+ $imagick = new Imagick($this->getStoreName());
+ } else {
+ $imagick = new Imagick();
+ $imagick->readImageBlob($imageBlob);
+ }
+
+ $orientation = $imagick->getImageOrientation();
+
+ switch($orientation) {
+ case Imagick::ORIENTATION_BOTTOMRIGHT:
+ $imagick->rotateimage(new ImagickPixel('#00000000'), 180); // rotate 180 degrees
+ break;
+
+ case Imagick::ORIENTATION_RIGHTTOP:
+ $imagick->rotateimage(new ImagickPixel('#00000000'), 90); // rotate 90 degrees CW
+ break;
+
+ case Imagick::ORIENTATION_LEFTBOTTOM:
+ $imagick->rotateimage(new ImagickPixel('#00000000'), -90); // rotate 90 degrees CCW
+ break;
+ }
+
+ return $imagick->getImageBlob();
+ }
+
+ function scale($imageBlob = false, $width = 0, $height = 0)
+ {
+ if(empty($imageBlob)){
+ $imagick = new Imagick($this->getStoreName());
+ } else {
+ $imagick = new Imagick();
+ $imagick->readImageBlob($imageBlob);
+ }
+
+ $imagick->resizeimage($width, $height, Imagick::FILTER_LANCZOS, true, true);
+
+ return $imagick->getImageBlob();
+
+ }
+