Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

image resize thumbnail crop hakkında

Konu, 'PHP' kısmında pckedi tarafından paylaşıldı.

  1. pckedi

    pckedi Aktif Üye

    Kayıt:
    26 Nisan 2006
    Mesajlar:
    297
    Beğenilen Mesajlar:
    0
    Şehir:
    ankara
    Arkdaşlar bu script aynı anda fotoyu 4 ayrı boyutta kesiyor biçiyor ..Ama ben çalıştıramadım tercüme ederek açıklayacak olursa benim için çok faydalı olacak teşekkürler.

    Kod:
    <?php
    /**
      * Generate a cached thumbnail for object lists (eg. carrier, order states...etc)
      *
      * @param string $image Real image filename
      * @param string $cacheImage Cached filename
      * @param integer $size Desired size
      */
    function cacheImage($image, $cacheImage, $size, $imageType = 'jpg')
    {
    	if (file_exists($image))
    	{
    		if (!file_exists(_PS_TMP_IMG_DIR_.$cacheImage))
    		{
    			$imageGd = ($imageType == 'gif' ? imagecreatefromgif($image) : imagecreatefromjpeg($image));
    			$x = imagesx($imageGd);
    			$y = imagesy($imageGd);
    			
    			/* Size is already ok */
    			if ($x < $size) 
    				copy($image, _PS_TMP_IMG_DIR_.$cacheImage);
    
    			/* We need to resize */
    			else
    			{
    				$ratioY = $y / ($x / $size);
    				$newImage = ($imageType == 'gif' ? imagecreatetruecolor($size, $ratioY) : imagecreatetruecolor($size, $ratioY));
    				
    				/* Allow to keep nice look even if resized */
    				$white = imagecolorallocate($newImage, 255, 255, 255);
    				imagefill($newImage, 0, 0, $white);
    				imagecopyresampled($newImage, $imageGd, 0, 0, 0, 0, $size, $ratioY, $x, $y);
    				imagecolortransparent($newImage, $white);
    
    				/* Quality alteration and image creation */
    				if ($imageType == 'gif')
    					imagegif($newImage, _PS_TMP_IMG_DIR_.$cacheImage);
    				else
    					imagejpeg($newImage, _PS_TMP_IMG_DIR_.$cacheImage, 86);
    			}
    		}
    		return '<img src="../img/tmp/'.$cacheImage.'" alt="" class="imgm" />';
    	}
    	return '';
    }
    
    /**
      * Generate a new settings file, only transmitted parameters are updated
      *
      * @param string $baseUri Base URI
      * @param string $theme Theme name (eg. default)
      * @param array $arrayDB Parameters in order to connect to database
      */
    function	rewriteSettingsFile($baseUri = NULL, $theme = NULL, $arrayDB = NULL)
    {
     	$defines = array();
    	$defines['__PS_BASE_URI__'] = !is_null($baseUri) ? $baseUri : __PS_BASE_URI__;
    	$defines['_THEME_NAME_'] = $theme ? $theme : _THEME_NAME_;
    	$defines['_DB_NAME_'] = (($arrayDB AND isset($arrayDB['_DB_NAME_'])) ? $arrayDB['_DB_NAME_'] : _DB_NAME_);
    	$defines['_DB_SERVER_'] = (($arrayDB AND isset($arrayDB['_DB_SERVER_'])) ? $arrayDB['_DB_SERVER_'] : _DB_SERVER_);
    	$defines['_DB_USER_'] = (($arrayDB AND isset($arrayDB['_DB_USER_'])) ? $arrayDB['_DB_USER_'] : _DB_USER_);
    	$defines['_DB_PREFIX_'] = (($arrayDB AND isset($arrayDB['_DB_PREFIX_'])) ? $arrayDB['_DB_PREFIX_'] : _DB_PREFIX_);
    	$defines['_DB_PASSWD_'] = (($arrayDB AND isset($arrayDB['_DB_PASSWD_'])) ? $arrayDB['_DB_PASSWD_'] : _DB_PASSWD_);
    	$defines['_DB_TYPE_'] = (($arrayDB AND isset($arrayDB['_DB_TYPE_'])) ? $arrayDB['_DB_TYPE_'] : _DB_TYPE_);
    	$defines['_COOKIE_KEY_'] = addslashes(_COOKIE_KEY_);
    	$defines['_COOKIE_IV_'] = addslashes(_COOKIE_IV_);
    	$defines['_PS_VERSION_'] = addslashes(_PS_VERSION_);
    	$content = "<?php\n\n";
    	foreach ($defines as $k => $value)
    		$content .= 'define(\''.$k.'\', \''.addslashes($value).'\');'."\n";
    	$content .= "\n?>";
    	if ($fd = fopen(PS_ADMIN_DIR.'/../config/settings.inc.php', 'w'))
    	{
    		fwrite($fd, $content);
    		fclose($fd);
    	}
    	else
    		Tools::displayError('cannot access settings file');
    }
    
    /**
      * Display SQL date in friendly format
      *
      * @param string $sqlDate Date in SQL format (YYYY-MM-DD HH:mm:ss)
      * @param boolean $withTime Display both date and time
      * @todo Several formats (french : DD-MM-YYYY)
      */
    function	displayDate($sqlDate, $withTime = false)
    {
    	return strftime('%Y-%m-%d'.($withTime ? ' %H:%M:%S' : ''), strtotime($sqlDate));
    }
    
    /**
      * Check image upload
      *
      * @param array $file Upload $_FILE value
      * @param integer $maxFileSize Maximum upload size
      */
    function	checkImage($file, $maxFileSize)
    {
    	if ($file['size'] > $maxFileSize)
    		return Tools::displayError('image is too large').' ('.($file['size'] / 1000).'ko). '.Tools::displayError('Maximum allowed:').' '.($maxFileSize / 1000).'ko';
    	/* pjpeg = Progressive jpeg */
    	$types = array('image/gif', 'image/jpg', 'image/jpeg', 'image/pjpeg', 'image/png', 'image/x-png');
    	if (!in_array($file['type'], $types))
    		return Tools::displayError('image format not recognized, allowed formats are: .gif, .jpg, .png');
    	if (strstr($file['name'], '.php') OR strstr($file['name'], '.pl'))
    		return Tools::displayError('image format not recognized, allowed formats are: .gif, .jpg, .png');
    	if ($file['error'])
    		return Tools::displayError('error while uploading image; change your server\'s settings');
    	return false;
    }
    
    /**
      * Check icon upload
      *
      * @param array $file Upload $_FILE value
      * @param integer $maxFileSize Maximum upload size
      */
    function	checkIco($file, $maxFileSize)
    {
    	if ($file['size'] > $maxFileSize)
    		return Tools::displayError('image is too large').' ('.($file['size'] / 1000).'ko). '.Tools::displayError('Maximum allowed:').' '.($maxFileSize / 1000).'ko';
    	if (substr($file['name'], -4) != '.ico')
    		return Tools::displayError('image format not recognized, allowed formats are: .ico');
    	if ($file['error'])
    		return Tools::displayError('error while uploading image; change your server\'s settings');
    	return false;
    }
    
    /**
      * Resize, cut and optimize image
      *
      * @param array $sourceFile Image object from $_FILE
      * @param string $destFile Destination filename
      * @param integer $destWidth Desired width (optional)
      * @param integer $destHeight Desired height (optional)
      *
      * @return boolean Operation result
      */
    function	imageResize($sourceFile, $destFile, $destWidth = NULL, $destHeight = NULL, $fileType = 'jpg')
    {
    	if (!isset($sourceFile['tmp_name']) OR !file_exists($sourceFile['tmp_name']))
    		return false;
    
    	list($sourceWidth, $sourceHeight, $type, $attr) = @getimagesize($sourceFile['tmp_name']);
    	if ($destWidth == NULL) $destWidth = $sourceWidth;
    	if ($destHeight == NULL) $destHeight = $sourceHeight;
    
    	$sourceImage = createSrcImage($type, $sourceFile['tmp_name']);
    
    	$widthDiff = $destWidth - $sourceWidth;
    	$heightDiff = $destHeight - $sourceHeight;
    	
    	if ($widthDiff > 0 AND $heightDiff > 0)
    	{
    		$nextWidth = $sourceWidth;
    		$nextHeight = $sourceHeight;
    	}
    	else
    	{
    		if (intval(Configuration::get('PS_IMAGE_GENERATION_METHOD')) == 2 OR (intval(Configuration::get('PS_IMAGE_GENERATION_METHOD')) == 0 AND $widthDiff > $heightDiff))
    		{
    			$nextHeight = $destHeight;
    			$nextWidth = intval(($sourceWidth * $nextHeight) / $sourceHeight);
    			$destWidth = (intval(Configuration::get('PS_IMAGE_GENERATION_METHOD')) == 0 ? $destWidth : $nextWidth);
    		}
    		else
    		{
    			$nextWidth = $destWidth;
    			$nextHeight = intval($sourceHeight * $destWidth / $sourceWidth);
    			$destHeight = (intval(Configuration::get('PS_IMAGE_GENERATION_METHOD')) == 0 ? $destHeight : $nextHeight);
    		}
    	}
    
    	$borderWidth = intval(($destWidth - $nextWidth) / 2);
    	$borderHeight = intval(($destHeight - $nextHeight) / 2);
    	
    	$destImage = @imagecreatetruecolor($destWidth, $destHeight);
    
    	$white = imagecolorallocate($destImage, 255, 255, 255);
    	imagefill($destImage, 0, 0, $white);
    	imagecopyresampled($destImage, $sourceImage, $borderWidth, $borderHeight, 0, 0, $nextWidth, $nextHeight, $sourceWidth, $sourceHeight);
    	imagecolortransparent($destImage, $white);
    
    	return	(returnDestImage($fileType, $destImage, $destFile));
    }
    
    /**
      * Cut image
      *
      * @param array $srcFile Image object from $_FILE
      * @param string $destFile Destination filename
      * @param integer $destWidth Desired width (optional)
      * @param integer $destHeight Desired height (optional)
      *
      * @return boolean Operation result
      */
    function	imageCut($srcFile, $destFile, $destWidth = NULL, $destHeight = NULL, $fileType = 'jpg', $destX = 0, $destY = 0)
    {
    	if (!isset($srcFile['tmp_name']) OR !file_exists($srcFile['tmp_name']))
    		return false;
    
    	// Source infos
    	$srcInfos = @getimagesize($srcFile['tmp_name']);
    	$src['width'] = $srcInfos[0];
    	$src['height'] = $srcInfos[1];
    	$src['ressource'] = createSrcImage($srcInfos[2], $srcFile['tmp_name']);
    	
    	// Destination infos
    	$dest['x'] = $destX;
    	$dest['y'] = $destY;
    	$dest['width'] = $destWidth != NULL ? $destWidth : $src['width'];
    	$dest['height'] = $destHeight != NULL ? $destHeight : $src['height'];
    	$dest['ressource'] = createDestImage($dest['width'], $dest['height']);
    	
    	imagecopyresampled($dest['ressource'], $src['ressource'], 0, 0, $dest['x'], $dest['y'], $dest['width'], $dest['height'], $dest['width'], $dest['height']);
    	imagecolortransparent($dest['ressource'], $white);
    	return	(returnDestImage($fileType, $dest['ressource'], $destFile));
    }
    
    function	createSrcImage($type, $filename)
    {
    	switch ($type)
    	{
    		case 1:
    			return @imagecreatefromgif($filename);
    			break;
    		case 3:
    			return @imagecreatefrompng($filename);
    			break;
    		case 2:
    		default:
    			return @imagecreatefromjpeg($filename);
    			break;
    	}
    }
    
    function	createDestImage($width, $height)
    {
    	$image = @imagecreatetruecolor($width, $height);
    	$white = @imagecolorallocate($image, 255, 255, 255);
    	@imagefill($image, 0, 0, $white);
    	return $image;
    }
    
    function	returnDestImage($type, $ressource, $filename)
    {
    	switch ($type)
    	{
    		case 'gif':
    			return @imagegif($ressource, $filename);
    			break;
    		case 'png':
    			return @imagepng($ressource, $filename, 7);
    			break;
    		case 'jpeg':
    		default:
    			return @imagejpeg($ressource, $filename, 90);
    			break;
    	}
    }
    
    /**
      * Delete product or category image
      *
      * @param integer $id_item Product or category id
      * @param integer $id_image Image id
      */
    function	deleteImage($id_item, $id_image = NULL)
    {
    	$path = ($id_image) ? _PS_PROD_IMG_DIR_ : _PS_CAT_IMG_DIR_;
    	$table = ($id_image) ? 'product' : 'category';
    	
    	if (file_exists(_PS_TMP_IMG_DIR_.$table.'_'.$id_item.'.jpg'))
    		unlink(_PS_TMP_IMG_DIR_.$table.'_'.$id_item.'.jpg');
    	
    	if ($id_image AND file_exists($path.$id_item.'-'.$id_image.'.jpg'))
    		unlink($path.$id_item.'-'.$id_image.'.jpg');
    	elseif (!$id_image AND file_exists($path.$id_item.'.jpg'))
    		unlink($path.$id_item.'.jpg');
    	
    	$imagesTypes = ImageType::getImagesTypes();
    	foreach ($imagesTypes AS $k => $imagesType)
    		if ($id_image AND file_exists($path.$id_item.'-'.$id_image.'-'.$imagesType['name'].'.jpg'))
    			unlink($path.$id_item.'-'.$id_image.'-'.$imagesType['name'].'.jpg');
    		elseif (!$id_image AND file_exists($path.$id_item.'-'.$imagesType['name'].'.jpg'))
    			unlink($path.$id_item.'-'.$imagesType['name'].'.jpg');
    }
    
    /**
      * Return path to a product category
      *
      * @param string $urlBase Start URL
      * @param integer $id_category Start category
      * @param string $path Current path
      * @param string $highlight String to highlight (in XHTML/CSS)
      */
    function	getPath($urlBase, $id_category, $path = '', $highlight = '')
    {
    	global $cookie;
    	
    	$category = new Category($id_category, intval($cookie->id_lang));
    	if (!$category->id)
    		return $path;
    	$name = ($highlight != NULL) ? str_ireplace($highlight, '<span class="highlight">'.$highlight.'</span>', 
    	Category::hideCategoryPosition($category->name)) : Category::hideCategoryPosition($category->name);
    	$edit = '<a href="'.$urlBase.'&id_category='.$category->id.'&addcategory"><img src="../img/admin/edit.gif" alt="Modify" /></a> ';
    	if ($category->id == 1)
    		$edit = '<a href="'.$urlBase.'&id_category='.$category->id.'&viewcategory"><img src="../img/admin/home.gif" alt="Home" /></a> ';
    	$path = $edit.'<a href="'.$urlBase.'&id_category='.$category->id.'&viewcategory">'.$name.'</a> > '.$path;
    	if ($category->id == 1)
    		return substr($path, 0, strlen($path) - 3);
    	return getPath($urlBase, $category->id_parent, $path);
    }
    
    function	getDirContent($path)
    {
    	$content = array();
    	if (is_dir($path))
    	{
    		$d = dir($path);
    		while (false !== ($entry = $d->read()))
    			if ($entry{0} != '.')
    				$content[] = $entry;
    		$d->close();
    	}
    	return $content;
    }
    
    function createDir($path, $rights)
    {
    	if (file_exists($path))
    		return true;
    	return @mkdir($path, $rights);
    }
    
    ?>
    
    
     
  2. Raiden

    Raiden self.life.start()

    Kayıt:
    11 Ekim 2004
    Mesajlar:
    4,392
    Beğenilen Mesajlar:
    0
    Şehir:
    /home/Raiden
    PHP:
    cacheImage('asil_dosyam.jpg','yeni_isim.jpg',600,'jpg');
     
  3. pckedi

    pckedi Aktif Üye

    Kayıt:
    26 Nisan 2006
    Mesajlar:
    297
    Beğenilen Mesajlar:
    0
    Şehir:
    ankara
    istediğim cevap değil cacheImage('1.jpg','2.jpg',200,'jpg'); bu sadece orantılı küçültüyor cerceveye küçültüp beyaz kenar ekyen kısımlarıda var.hepsini çalıştırmalıyım.
    Raiden yinede teşekkürler.Bu kodlar acık kaynak Bir e-ticaret scriptinin resim yükleme codeları resimi 5 değişik boyutlarda biçimlendiriyor.Nasıl çalıştığını anlıyarak öğrenirsem kendimde kulllanacağım.teşekkürler.
     
  4. pckedi

    pckedi Aktif Üye

    Kayıt:
    26 Nisan 2006
    Mesajlar:
    297
    Beğenilen Mesajlar:
    0
    Şehir:
    ankara
    bu codeları bir kenara koyup yapmak istediğim şeye gelirsek.yollanan resimin ölçüsünü almak ve verdiğim ölçülerde göre orantılı küçültmek ve kalanına beyaz yapmak veya beyaz arka plan atılarak istenilen ölçüde kayedetmek.farklı ölçülerde resimler kaydedilecek yolladığım resimden.

    1. resim ; orjinal resim verdiğim ölçülerden küçük ise küçültmeden kenarları beyazla doldurularak istenilen ölçüde kaydedilecek.burda orantı boya göre olacak.
    2.resim ; boya göre orantılı küçültülüp verdiğim ölçülerde kalanı beyazla doldurulacak.
    3.resim ; ene göre orantılı küçültülüp verdiğim ölçülerde kalanı beyazla doldurulacak.

    windows ta ki thumbnail gibi olacak sanırım. vermiş olduğum uzun code bu işi yapıyor.vt kayıt ediyor kategori belirliyor vs. o yüzden biraz uzun ve karışık.
    bunu halledebilirsem çok mutlu olurum elimde image resize örnekleri var kullandığım ama ene göre orantılıyor ve kalanı beyaza boyması gibi bişey yok.farklı boylarda boya göre orantılı thumbnail yapmak istiyorum işte.Burda mantığıda öğrenmiş olacağım teşekkürler.
     
  5. pckedi

    pckedi Aktif Üye

    Kayıt:
    26 Nisan 2006
    Mesajlar:
    297
    Beğenilen Mesajlar:
    0
    Şehir:
    ankara
    arkadaşlar benim için bu çok önemli.şu yöntemide denedim ilk başta ene göre sonrada boya göre oratıladım.olmadı verdiğim ölüçünün içine orantı bir şekilde küçülecek resmin kalan kısımları imagefill() ile beyaz renge boyanacak.ileri seviye ceviz ciler yardımlarınızı bekliyorum.teşekkürler.
     
  6. pckedi

    pckedi Aktif Üye

    Kayıt:
    26 Nisan 2006
    Mesajlar:
    297
    Beğenilen Mesajlar:
    0
    Şehir:
    ankara
    böyle birşey buldum verilen ölçünün içine orantılı küçültüyor istediğim gibi arkayada beyaz boyanmış plan atıyor, ama buda ortalamıyor resmi içinde.birde verilen ölçüden küçük bir resim verildiğindede resmi verilen ölüçüde büyütüyor.

     
  7. pckedi

    pckedi Aktif Üye

    Kayıt:
    26 Nisan 2006
    Mesajlar:
    297
    Beğenilen Mesajlar:
    0
    Şehir:
    ankara
    ortalama için orantılı küçülen resmin boyutunu alıp ölüçüye göre yuvarlayıp girmem gerekiyor sanırım bu raya $thumb, $img, 0, 0, 0, 0,

    birde verilen ölçüden küçük bir resim verildiğindede .burdada yollanan resmin boyutu öğrenilip verilen ölçüden küçükse boyutlandırma yapılmadan ölçüye göre oratalanıp arka plan ile kaydedilmeli sanırım.hala yardım bekliyorum.içinden çıkamadım.