最大流EK算法模版-POJ1273

2023-03-14   ES  

<?php
 /*
 * 图片微缩类
 * author chendan 2011.09.01.
 */
class Thumbnail {
	protected $_original;
	//原始宽度
	protected $_originalwidth;
	//原始高度
	protected $_originalheight;
	//缩微宽度
	protected $_thumbwidth;
	//缩微高度
	protected $_thumbheight;
	protected $_maxsize = 120;
	protected $_canprocess = false;
	protected $_imagetype;
	protected $_destination;
	protected $_name;
	protected $_suffix = "_thb";
	protected $_messages = array();
	protected $_filename;

	public function __construct($image) {
		if(is_file($image) && is_readable($image)){
			$details = getimagesize($image);
		}else{
			$details = null;
			$this->_messages[] = "Can not open $image";
		}
		if(is_array($details)){
			$this->_original = $image;
			$this->_originalwidth = $details[0];
			$this->_originalheight = $details[1];
			$this->checkType($details['mime']);
		}else{
			$this->_messages[] = "$image does not appear to be an image"; 
		}
	}

	protected function checkType($mime) {
		$mimetypes = array('image/jpeg','image/jpg','image/png','image/gif');
		if(in_array($mime,$mimetypes)){
			$this->_canprocess = true;
			$this->_imagetype = substr($mime,6);
		}
	}

	public function setDestination($destination) {
		if(is_dir($destination) && is_writable($destination)){
			$last = substr($destination,-1);
			if($last == '/' || $last =="\\"){
				$this->_destination = $destination;
			}else{
				$this->_destination = $destination.DIRECTORY_SEPARATOR;
			}
		}else{
			$this->_messages[] = "Cannot write to $destination";
		}
	}

	public function setMaxSize($size) {
		if(is_numeric($size) && $size > 0){
			$this->_maxsize = $size;
		}else{
			$this->_canprocess = false;
			$this->_messages[] = "The value for setMaxSize() must be a positive number";
		}
	}

	public function setSuffix($suffix) {
		if(preg_match('/^\w+$/',$suffix)){
			if(strpos($suffix,'_')!==0){
				$this->_suffix = '_'.$suffix;
			}else{
				$this->_suffix = $suffix;
			}
		}else{
			$this->_suffix = '';
		}
	}

	protected function calculateSize($width,$height) {
		if($width<$this->_maxsize && $height < $this->_maxsize){
			$ratio = 1;
		}elseif($width>$height){
			$ratio = $this->_maxsize / $width;
		}else{
			$ratio = $this->_maxsize / $height;
		}
		$this->_thumbwidth = round($width * $ratio);
		$this->_thumbheight = round($height * $ratio);
	}

	protected function getName() {
		$extensions = array('/\.jpeg$/i','/\.jpg$/i','/\.png$/i','/\.gif$/i');
		$this->_name = preg_replace($extensions,'',basename($this->_original));
	}

	public function create() {
		if($this->_canprocess && $this->_originalwidth != 0){
			$this->calculateSize($this->_originalwidth,$this->_originalheight);
			$this->getName();
			$this->createThumbnail();
		}elseif($this->_originalwidth == 0){
			$this->_messages[] = "Can not determine size of ".$this->_original;
		}
	}
	protected function createImageResource() {
		if($this->_imagetype == 'jpeg'){
			return imagecreatefromjpeg($this->_original);
		}elseif($this->_imagetype == 'png'){
			return imagecreatefrompng($this->_original);
		}elseif($this->_imagetype == 'gif'){
			return imagecreatefromgif($this->_original);
		}
	}
	protected function createThumbnail() {
		$resource = $this->createImageResource();
		$thumb = imagecreatetruecolor($this->_thumbwidth,$this->_thumbheight);
		imagecopyresampled($thumb,$resource,0,0,0,0,$this->_thumbwidth,$this->_thumbheight,$this->_originalwidth,$this->_originalheight);
		$newname = $this->_name.$this->_suffix;
		if($this->_imagetype == 'jpeg'){
			$newname .= '.jpg';
			$success = imagejpeg($thumb,$this->_destination.$newname,100);
		}elseif($this->_imagetype == 'png'){
			$newname .= '.png';
			$success = imagepng($thumb,$this->_destination.$newname,0);
		}elseif($this->_imagetype == 'gif'){
			$newname .= '.gif';
			$success = imagegif($thumb,$this->_destination.$newname);
		}
		if($success){
			$this->_filename = $newname;
			$this->_messages[] = "$newname 创建成功.";
		}else{
			$this->_messages[] = basename($this->_original)."不能创建缩微图";
		}
		imagedestroy($resource);
		imagedestroy($thumb);
	}

	public function getMessages() {
		return $this->_messages;
	}
	
	public function getFilename() {
		return $this->_filename;
	}
}

?>

source

Related Posts

Count The Colors Zoj -1610 Line Section Tree (You can pass violent water) YCQ

Java How to convert files to hexadic

Connect the database with ThinkPHP and test whether the connection is successful

Center vsftpd configuration analysis and instance Edwardqing

最大流EK算法模版-POJ1273

Random Posts

Ilruntime breakpoint debugging

“Programmer Installation B Guide”

[HDU 1269] Lysaka Castle Strong Connect

Vue project often ignored tips Rainbow

PIP3 in PYTHON3 Install an error, you can’t find SSL