Rev 17012 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?phpnamespace LeadersLinked\Library;class Image{/**** @var \LeadersLinked\Library\Image*/private static $_instance;/**** @var \LeadersLinked\Library\Storage*/private $storage;/**** @var array*/private $config;/**** @param array $config*/private function __construct($config){$this->config = $config;$this->storage = Storage::getInstance($config);}/**** @param array $config* @return \LeadersLinked\Library\Image*/public static function getInstance($config){if(self::$_instance == null) {self::$_instance = new Image($config);}return self::$_instance;}/**** @return \LeadersLinked\Library\Storage*/public function getStorage(){return $this->storage;}/**** @param string $source* @param string $target_path* @param string $target_code* @param string $target_filename* @param number $target_width* @param number $target_height* @param boolean $crop_to_dimensions* @param boolean $unlink_source* @return boolean*/public function uploadImageChangeSize($source, $target_path, $target_code, $target_filename, $target_width, $target_height, $crop_to_dimensions, $unlink_source){try {$data = file_get_contents($source);$img = imagecreatefromstring($data);if($img) {list($source_width, $source_height) = getimagesize($source);if($crop_to_dimensions) {$width_ratio = $target_width / $source_width;$height_ratio = $target_height / $source_height;if($width_ratio > $height_ratio) {$resized_width = $target_width;$resized_height = $source_height * $width_ratio;} else {$resized_height = $target_height;$resized_width = $source_width * $height_ratio;}} else {$width_ratio = $target_width / $source_width;$resized_width = $target_width;$resized_height = $source_height * $width_ratio;if($resized_height > $target_height) {$height_ratio = $target_height / $resized_height;$resized_height = $target_height;$resized_width = $resized_width * $height_ratio;}}$resized_width = round($resized_width);$resized_height = round($resized_height);$offset_width = round(($target_width - $resized_width) / 2);$offset_height = round(($target_height - $resized_height) / 2);$new_image = imageCreateTrueColor($target_width, $target_height);imageAlphaBlending($new_image, False);imageSaveAlpha($new_image, True);$transparent = imageColorAllocateAlpha($new_image, 0, 0, 0, 127);imagefill($new_image, 0, 0, $transparent);imageCopyResampled($new_image, $img , $offset_width, $offset_height, 0, 0, $resized_width, $resized_height, $source_width, $source_height);$temp_filename = sys_get_temp_dir() . DIRECTORY_SEPARATOR . $target_filename;imagepng($new_image, $temp_filename);$result = $this->storage->putFile($target_path, $target_code, $temp_filename);unlink($temp_filename);if($unlink_source) {@unlink($source);}return $result;} else {if($unlink_source) {@unlink($source);}return true;}}catch (\Throwable $e){if($unlink_source) {@unlink($source);}error_log($e->getTraceAsString());return false;}}/**** @param string $source* @param string $target_path* @param string $target_code* @param string $target_filename* @param boolean $unlink_source* @return boolean*/public function uploadImageRaw($source, $target_path, $target_code, $target_filename, $unlink_source){try {$data = file_get_contents($source);$img = imagecreatefromstring($data);if($img) {list($source_width, $source_height) = getimagesize($source);$target_width = $source_width;$target_height = $source_height;$width_ratio = $target_width / $source_width;$height_ratio = $target_height / $source_height;if($width_ratio > $height_ratio) {$resized_width = $target_width;$resized_height = $source_height * $width_ratio;} else {$resized_height = $target_height;$resized_width = $source_width * $height_ratio;}$resized_width = round($resized_width);$resized_height = round($resized_height);$offset_width = round(($target_width - $resized_width) / 2);$offset_height = round(($target_height - $resized_height) / 2);$new_image = imageCreateTrueColor($target_width, $target_height);imageAlphaBlending($new_image, False);imageSaveAlpha($new_image, True);$transparent = imageColorAllocateAlpha($new_image, 0, 0, 0, 127);imagefill($new_image, 0, 0, $transparent);imageCopyResampled($new_image, $img , $offset_width, $offset_height, 0, 0, $resized_width, $resized_height, $source_width, $source_height);$target = $target_path . DIRECTORY_SEPARATOR . $target_filename;if(file_exists($target)) {@unlink($target);}$temp_filename = sys_get_temp_dir() . DIRECTORY_SEPARATOR . $target_filename;imagepng($new_image, $temp_filename);$result = $this->storage->putFile($target_path, $target_code, $temp_filename);unlink($temp_filename);if($unlink_source) {unlink($source);}return $result;}if($unlink_source) {unlink($source);}return true;}catch (\Throwable $e){if($unlink_source) {unlink($source);}error_log($e->getTraceAsString());return false;}}}