private function generatePictureFile($source_file, $max_size, $tmp_filename = "") { if (!$tmp_filename) { $tmp_filename = CACHE_DIR . "/" . gen_id() . ".png"; } if (!is_file($source_file)) { return null; } if (!$max_size) { $max_size = 600; } Env::useLibrary('simplegd'); $image = new SimpleGdImage($source_file); if ($image->getWidth() > $max_size || $image->getHeight() > $max_size) { if ($image->getWidth() > $image->getHeight()) { $w = $max_size; $ratio = $image->getHeight() / $image->getWidth(); $h = $ratio * $w; } else { $h = $max_size; $ratio = $image->getWidth() / $image->getHeight(); $w = $ratio * $h; } $new_image = $image->resize($w, $h, false); $new_image->saveAs($tmp_filename); $repo_id = FileRepository::addFile($tmp_filename, array('type' => 'image/png', 'public' => true)); @unlink($tmp_filename); return $repo_id; } else { return null; } }
/** * Set contact picture from $source file * * @param string $source Source file * @param integer $max_width Max picture widht * @param integer $max_height Max picture height * @param boolean $save Save user object when done * @return string */ function setPicture($source, $fileType, $max_width = 50, $max_height = 50, $save = true) { if (!is_readable($source)) { return false; } do { $temp_file = ROOT . '/cache/' . sha1(uniqid(rand(), true)); } while (is_file($temp_file)); Env::useLibrary('simplegd'); $image = new SimpleGdImage($source); if ($image->getImageType() == IMAGETYPE_PNG) { if ($image->getHeight() > 128 || $image->getWidth() > 128) { // resize images if are png bigger than 128 px $thumb = $image->scale($max_width, $max_height, SimpleGdImage::BOUNDARY_DECREASE_ONLY, false); $thumb->saveAs($temp_file, IMAGETYPE_PNG); $public_fileId = FileRepository::addFile($temp_file, array('type' => 'image/png', 'public' => true)); } else { //keep the png as it is. $public_fileId = FileRepository::addFile($source, array('type' => 'image/png', 'public' => true)); } } else { $thumb = $image->scale($max_width, $max_height, SimpleGdImage::BOUNDARY_DECREASE_ONLY, false); $thumb->saveAs($temp_file, IMAGETYPE_PNG); $public_fileId = FileRepository::addFile($temp_file, array('type' => 'image/png', 'public' => true)); } if ($public_fileId) { $this->setPictureFile($public_fileId); if ($save) { $this->save(); } // if } // if $result = true; // Cleanup if (!$result && $public_fileId) { FileRepository::deleteFile($public_fileId); } // if @unlink($temp_file); return $result; }