Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель 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), 0000$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$rx000$wmw$wmh35);
    }
    
    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 Яндекс.Метрика Яндекс цитирования