За последние 24 часа нас посетили 57339 программистов и 1810 роботов. Сейчас ищут 894 программиста ...

php и создание тамбнейлов

Тема в разделе "Прочие вопросы по PHP", создана пользователем Александр Живой, 12 май 2016.

Метки:
  1. Александр Живой

    С нами с:
    22 окт 2014
    Сообщения:
    11
    Симпатии:
    0
    удобного.
    У меня есть тестовое задание. Парни, помогите мне правильно понять, что от меня меня хотят. Вот как задание выглядит в оригинале:

    Написать скрипт создания тамбнейла графического или видео
    файла(минимальный набор форматов png, jpg, flv, mp4), на входе путь к
    файлу, размер, на выходе путь к файлу тамбнейла.

    Как я его понял: тамбнейлы - это что-то вроде превьюшек. Форматы png и jpg я обработал с помощью функции imagecopyresized(). Загрузил, скопировал, уменьшил. А что делать с форматом mp4 мне совершенно непонятно. Все, что нашел в инете, связанное с php и обработкой видео, это инфу о программке ffmpeg. Поигрался с ней и написал скрипт, который при загрузке видео выцепляет несколько кадров и сохраняет их в jpg. Но в итоге тех ребят, которые мне это задание дали, это не устроило. Подробностей говорить не хотят))

    Так вот что от меня хотят эти славные мэны? Подскажите, в каком направлении мне рыть?)

    PS. Задание сие является тестовым, посему практической цели никакой не носит. Просто хотят посмотреть, на что я способен.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Это ноготь большого пальца. Превьюшка, да.

    ну тогда и забей. Может им рожа твоя не понравилась. Покажи код, может че скажем более предметно.

    по всей видимости ничего
     
  3. Александр Живой

    С нами с:
    22 окт 2014
    Сообщения:
    11
    Симпатии:
    0
    это скрипт работает с программкой ffmpeg

    PHP:
    1. <!DOCTYPE HTML>
    2. <html>
    3.     <head>
    4.         <meta charset="utf-8">
    5.         <title>ffmpeg</title>
    6.     </head>
    7.     <body>
    8.         <form method="post" action="ffmpeg.php" enctype="multipart/form-data">
    9.             <input type="file" name="file">
    10.             <input type="submit" name="submit" value="ok">
    11.         </form>
    12.  
    13.         <?php
    14.             if(isset($_POST['submit'])){
    15.                 $ffmpeg = "C:\\ffmpeg\\bin\\ffmpeg";
    16.                 $video_file = $_FILES['file']['tmp_name'];
    17.                 $image_file = "1.jpg";
    18.                 $size = "120x90";
    19.                 // $get_from_second = 5;
    20.                 // $cmd = $ffmpeg." -i ".$video_file." -an -ss ".$get_from_second." -s ".$size." testimg/".$n.".jpg";
    21.            
    22.                 for($n = 1; $n <= 3; $n++){
    23.                     $interval = $n * 3;
    24.                     shell_exec($ffmpeg." -i ".$video_file." -an -ss ".$interval." -s ".$size." testimg\\".$n.".jpg");
    25.                     echo "Created ".$n.".jpg<br>";
    26.                     echo "<img src = 'testimg/".$n.".jpg';><br>";
    27.                 }
    28.             }
    29.         ?>
    30.  
    31.     </body>
    32. </html>
    --- Добавлено ---
    Этот скрипт загружает, копирует и изменяет размер картинки

    PHP:
    1. <!DOCTYPE HTML>
    2. <html>
    3.     <head>
    4.         <meta charset="utf-8">
    5.         <title>Image resize</title>
    6.     </head>
    7.     <body>
    8.         <form method="post" action="resizeimage.php" enctype="multipart/form-data">
    9.             <input type="file" name="file">
    10.             <input type="submit" name="submit" value="ok">
    11.         </form>
    12.        
    13.         <?php
    14.             $file = $_FILES['file']['name'];
    15.             $tmp = $_FILES['file']['tmp_name'];
    16.             $dir = "testimg";
    17.            
    18.             $ext = pathinfo($file, PATHINFO_EXTENSION);//добываем тип файла
    19.            
    20.             if(is_uploaded_file($tmp)){//проверяем, получили ли мы файл
    21.                 if($ext == "jpg" || $ext == "jpeg" || $ext == "png"){//проверяем тип файла. если jpg или png - продолжаем
    22.                     $file = rand(100, 999).".".$ext;//переименовываем файл (если кириллица, чтоб не морочиться с кодировкой)
    23.                    
    24.                     if(move_uploaded_file($tmp, $dir."/".$file)){//проверяем, переместили ли мы файл в нужную директорию
    25.                        
    26.                         //узнаем размер картинки и подставляем значения в переменные
    27.                         list($w, $h) = getimagesize($dir."/".$file);
    28.                        
    29.                         if($w > $h){//если ширина больше высоты
    30.                             $new_w = 140;
    31.                             //вычисляем новую высоту
    32.                             $new_h = 140 * $h / $w;
    33.                             //округляем
    34.                             $new_h = round($new_h, 0);
    35.                         }else{
    36.                             $new_w = 140 * $w / $h;
    37.                             $new_w = round($new_w, 0);
    38.                             $new_h = 140;
    39.                         }
    40.                        
    41.                         //задаем новую картинку с новыми размерами
    42.                         $new_file = imagecreatetruecolor($new_w, $new_h);
    43.                        
    44.                         if($ext == "jpg" || $ext == "jpeg"){
    45.                             $source = imagecreatefromjpeg($dir."/".$file);
    46.                         }
    47.                         if($ext == "png"){
    48.                             $source = imagecreatefrompng($dir."/".$file);
    49.                         }
    50.                        
    51.                        
    52.                         if(imagecopyresized($new_file, $source, 0, 0, 0, 0, $new_w, $new_h, $w, $h)){
    53.                             if($ext == "jpg" || $ext == "jpeg"){
    54.                                 $image = imagejpeg($new_file, $dir."/"."new_".$file, 90);
    55.                             }
    56.                             if($ext == "png"){
    57.                                 $image = imagepng($new_file, $dir."/"."new_".$file, 90);
    58.                             }
    59.                             //показываем результат
    60.                             echo "<p>
    61.                                    ".$new_w." x ".$new_h."<br>
    62.                                    <img src='testimg/new_".$file."'>
    63.                                </p>";
    64.                         }else{
    65.                             exit("у тебя не получилось изменить размер картинки");
    66.                         }
    67.                     }else{
    68.                         exit("это не картинка");
    69.                     }
    70.                 }else{
    71.                     exit("это не jpg и не png");
    72.                 }
    73.             }else{
    74.                 exit("это не картинка");
    75.             }
    76.         ?>
    77.     </body>
    78. </html>
    --- Добавлено ---
    может быть. поговаривают, что эти славные мэны работают исключительно на битриксе, а про битрикс я ничего положительного не вычитывал, кроме разве что на стартовой странице официального сайта)
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Исходное задание не говорит о загрузке файла. Я так понимаю, требуется написать библиотечную функцию или класс: на входе путь, на выходе другой путь. А ты наваял вебформу. Это самодеятельность.
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Никто не любит битрикс. Но ты собираешся бросить это задание из-за того что не получилось, именно поэтому начал искать косяки в тех парнях. :) А не потому, что они говномесы. Это непродуктивно.
     
  6. Александр Живой

    С нами с:
    22 окт 2014
    Сообщения:
    11
    Симпатии:
    0
    вот была отличная возможность поиграться с классами, я упустил. спасибо) поясните пожалуйста, как мне загуглить этот момент, что в цитате выше? не очень представляю, как это должно выглядеть
    --- Добавлено ---
    нене) я лишь рассматриваю все возможные варианты исхода)) спасибо за ориентир. попробую им накидать класс. может в этот раз прокатит
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Возьми за образец любую библиотеку манипуляции изображениями. Вот хотябы Intervention image.

    А где-то внутри класса надо обнаруживать особый случай: если входящий файл видео, а не картинка. В этом случае пусть обращается к еще одному классу, который рулит ffmpeg. Но снаружи это не должно быть видно. Это чёрный ящик: есть описанный интерфейс и известно какой результат будет. Но детали реализации не должны бросаться в глаза.
     
  8. Александр Живой

    С нами с:
    22 окт 2014
    Сообщения:
    11
    Симпатии:
    0
    спасибо) поковыряюсь. Теперь хоть представляю, куда дальше мне пилить
     
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв