Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: "Умное" изменение размера картинки
 
 автор: sl1p   (30.05.2009 в 13:48)   письмо автору
 
 

Есть функция:
<?php
function imgResize($image_path, $new_image_path, $w, $h, $smart_resize = false, $watermark = false, $watermark_path = "") {
    
$size     = getimagesize($image_path);
    
$misratio = $size[0] / $size[1];

    if(
$w / $h < $misratio) $h = $w * $misratio;
    else                    
$w = $h * $misratio;
    
    
$ext  = strtolower(substr(strchr($image_path, '.'), 1));
    
$ext  = $ext == 'jpg' ? 'jpeg' : $ext;
    
$open = 'imagecreatefrom' . $ext;
    
$save = 'image' . $ext;

    
$image_temp = imagecreatetruecolor($w, $h);
    
imagecopyresampled($image_temp,  $open($image_path), 0, 0, 0, 0, $w, $h, $size[0], $size[1]);
    
    if(
$watermark){
        
$wm  = imagecreatefromgif($watermark_path);
        
$wmw = imagesx($wm); $itw = imagesx($image_temp);
        
$wmh = imagesy($wm); $ith = imagesy($image_temp);
        
$rx  = ($itw - $wmw);
        
//$trcolor = imagecolorexact($wm, 255, 255, 255);
        //imagecolortransparent($wm, $trcolor);
        
imagecopymerge($image_temp, $wm, $rx, 0, 0, 0, $wmw, $wmh, 35);
    }
    
    return 
$save($image_temp, (empty($new_image_path) ? $image_path : $new_image_path), 80);
}
?>

получает $w, $h - допустим 800х600
Но хотелось бы как-то сделать так, чтобы если высота картинки больше ширины то $w, $h менялись бы на 600х800.
Логика совсем не работает) помогите :)

  Ответить  
 
 автор: temp   (30.05.2009 в 15:23)
 
   для: sl1p   (30.05.2009 в 13:48)
 

примерно так:
$size_img = getimagesize($image);

  if($size_img[0] < $size_img[1])
  {
     $temp = $w;
     $w = $h;
     $h = $temp;
  }

  Ответить  
 
 автор: sl1p   (30.05.2009 в 15:58)   письмо автору
 
   для: temp   (30.05.2009 в 15:23)
 

я так делал но, пропустил следующую строку кода и получалось криво:)
в общем вот так:

<?
if($smart_resize && $size[0] < $size[1]) {
    
$x = $w;
    
$w = $h;
    
$h = $x;
} else 
$smart_resize = false;
    
$misratio = $smart_resize ? $size[1] / $size[0] : $size[0] / $size[1];

  Ответить  
 
 автор: psychomc   (30.05.2009 в 16:52)   письмо автору
 
   для: temp   (30.05.2009 в 15:23)
 

вроде это можно сделать без третьей переменной, была где-то похожая задачка. :) только не помню как

  Ответить  
 
 автор: sl1p   (30.05.2009 в 17:51)   письмо автору
 
   для: psychomc   (30.05.2009 в 16:52)
 

list($a,$b) = array($b,$a)

:)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования