Зеркалирование картинки

Тема в разделе "Как сделать...", создана пользователем LEXAlForpostl, 16 июн 2011.

  1. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    Здравствуйте.
    Подскажите, пожалуйста, как называется функция зеркалирования картинки по горизонтали?
     
  2. rizhiknet

    rizhiknet Создатель

    Регистр.:
    27 май 2009
    Сообщения:
    22
    Симпатии:
    2
    Я могу и ошибаться, но простой функции, которая делает зеркало на php нету. Но вот нашел примерчик, может он тебе поможет:
    PHP:
    <?php
       define
    ("IMAGE_FLIP_HORIZONTAL",    1);
       
    define("IMAGE_FLIP_VERTICAL",    2);
       
    define("IMAGE_FLIP_BOTH",    3);
     function 
    ImageFlip($imgsrc$type)
     {
       
    $width imagesx($imgsrc);
       
    $height imagesy($imgsrc);
       
    $imgdest imagecreatetruecolor($width$height);
       switch( 
    $type )
           {
           
    // mirror wzgl. osi
           
    case IMAGE_FLIP_HORIZONTAL:
               for( 
    $y=$y<$height $y++ )
                   
    imagecopy($imgdest$imgsrc0$height-$y-10$y$width1);
               break;
           case 
    IMAGE_FLIP_VERTICAL:
               for( 
    $x=$x<$width $x++ )
                   
    imagecopy($imgdest$imgsrc$width-$x-10$x01$height);
               break;
           case 
    IMAGE_FLIP_BOTH:
               for( 
    $x=$x<$width $x++ )
                   
    imagecopy($imgdest$imgsrc$width-$x-10$x01$height);
               
    $rowBuffer imagecreatetruecolor($width1);
               for( 
    $y=$y<($height/2) ; $y++ )
                   {
                   
    imagecopy($rowBuffer$imgdest  000$height-$y-1$width1);
                   
    imagecopy($imgdest  $imgdest  0$height-$y-10$y$width1);
                   
    imagecopy($imgdest  $rowBuffer0$y00$width1);
                   }
               
    imagedestroy$rowBuffer );
               break;
           }
       return( 
    $imgdest );
     }
     
    ?>
     
    LEXAlForpostl нравится это.
  3. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    Подошло.
    Только есть одно НО.
    Исходный размер jpeg картинки 15 КБ, при повороте получается размер картинки 23 КБ. Почему увеличивается размер более чем на 50%? Возможно ли этого избежать?
     
  4. Disem

    Disem Писатель

    Регистр.:
    10 ноя 2007
    Сообщения:
    5
    Симпатии:
    0
  5. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    Это не сжатие, а изменение размера :)
     
  6. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    а в каком формате изображение?
    подозреваю, что JPG
     
  7. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    когда сохраняешь картинку в jpg, 3й параметр функции imagejpeg() это качество картинки от 0 до 100, по умолчанию используется ~75, поставь меньше и размер картинки соответственно уменьшится.

    Либо же при повороте последовательность пикселов меняется таким образом, что алгоритм сжатия выдает больший размер, причин может быть много (хотя 50% размера от этого конечно не может быть, но в пределах 2-5% вполне вероятно)
     
  8. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    Верно подозреваете.

    Как узнать в исходном изображении какое качество?
     
  9. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    никак, методом "научного тыка" просто эксперементируй с цифрой качества при сохранении
     
  10. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    Пытаюсь выполнить:
    PHP:
    imagejpeg(ImageFlip('old_im.jpg'1),"1.jpg");
    Однако, новый файл с изображением не создаётся.