вопрос о картинке (кадрировать)

Тема в разделе "PHP", создана пользователем ivashka, 8 май 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. ivashka

    ivashka

    Регистр.:
    16 май 2007
    Сообщения:
    151
    Симпатии:
    15
    Здравствуйте.
    Есть линк на картинку, нет ли у кого готовой функции для кадрации.
    Нужно отрезать n пикселей с низу.
    Или как написать?
    Заранее благодарен.
     
  2. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    PHP:
    <?php
    $srcfile
    ="11.jpg";  // исходный файл
    $dstfile="22.jpg";  // "обрезанный" файл
    $y=40;  // на сколько пикселей отрезать по y
    $r=imagecreatefromjpeg($srcfile);
    $t=imagecreate(imagesx($r),imagesy($r)-$y);
    imagecopyresized($t,$r,0,0,0,0,imagesx($t),imagesy($t),imagesx($r),imagesy($r)-$y);
    imagejpeg($t,$dstfile,50);
    ?>
    P.S.: скрипт переделывает jpeg-файлы. Если нужно другие, то функции
    imagejpeg
    и
    imagecreatefromjpeg
    замени на соответствующие.
     
  3. wwwitalya

    wwwitalya Создатель

    Регистр.:
    4 май 2009
    Сообщения:
    45
    Симпатии:
    18
    PHP:
    /**
    * аналог php-функции image_type_to_extension
    *
    * @param int $imagetype
    * @return string 
    */
    function image_type_to_extension2($imagetype){
        if(empty(
    $imagetype)) return false;
        switch(
    $imagetype)
        {
            case 
    IMAGETYPE_GIF: return 'gif';
            case 
    IMAGETYPE_JPEG: return 'jpeg';
            case 
    IMAGETYPE_PNG: return 'png';
            case 
    IMAGETYPE_WBMP: return 'wbmp';
            default: return 
    false;
        }
    }

    /**
     * Crop
     *
     * @param string $src
     * @param int $x
     * @param int $y
     * @param int $w
     * @param int $h
     */
    function crop_img($src$x$y$w$h){
        
    $image_params=getimagesize($src);
        if (eval(
    "\$src_img=imagecreatefrom".image_type_to_extension2($image_params[2])."('".$src."');")!==false){
            
    $dest_img=imagecreatetruecolor($w$h);
            
    imagecopyresampled($dest_img$src_img00$x$y$w$h$w$h);
            eval(
    "image".image_type_to_extension2($image_params[2])."(\$dest_img, \$src, 100);");
        }
    }

    crop_img("{$_SERVER['DOCUMENT_ROOT']}/001.JPG"300200200200);
     
  4. ivashka

    ivashka

    Регистр.:
    16 май 2007
    Сообщения:
    151
    Симпатии:
    15
    полностью подходит, но такой способ почему-то искажает цвета картинки. Картинки становятся просто ужасные...
    В чем дело, что можно сделать?
    Ставлю imagejpeg($t,$dstfile,100);
     
  5. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    тогда вместо
    PHP:
    $t=imagecreate(imagesx($r),imagesy($r)-$y);
    ставь
    PHP:
    $t=imagecreatetruecolor(imagesx($r),imagesy($r)-$y);
     
Статус темы:
Закрыта.