За последние 24 часа нас посетили 20685 программистов и 1106 роботов. Сейчас ищут 387 программистов ...

Загрузка изображений

Тема в разделе "PHP для новичков", создана пользователем kuzmich, 6 дек 2022.

  1. kuzmich

    kuzmich Активный пользователь

    С нами с:
    6 мар 2017
    Сообщения:
    39
    Симпатии:
    0
    всем привет.

    Есть рабочий код который позволяет загрузить несколько изображений за раз к товару. Работает все изумительно — сжимает изображение в двое.

    Код (Text):
    1. <div id="add-image" class="add-image">
    2. <div class="add-image-wrapper">
    3. <div class="add-image-css">
    4. <div class="add-image-header">
    5. <h3 class="add-image-title">Изображения</h3>
    6. <a href="#close" title="Закрыть" class="iw-close">×</a>
    7. </div>
    8. <div class="add-image-text">  
    9. <?php
    10. if (!isset($_POST['image_id'])) {
    11. if (!isset($_POST['article'])) {
    12. if (!isset($_POST['image'])) {}
    13. else {
    14. echo "
    15. <form name='form1' method='POST' action='#add-image' enctype='multipart/form-data'>
    16. <input type='hidden' name='article' value='".$_POST['image']."'>
    17. <input accept='image/jpeg' type='file' name='file[]' multiple style='width:99%'>
    18. <input class='input_submit' type='submit' name='submit' value='Добавить фотографию(ии)'>
    19. </form>
    20. <table align='center' border='1' cellpadding='0' cellspacing='0' width='100%'>
    21. <tr>
    22.   <td bgcolor='#CCCCCC' width='80%'><div align='center'><strong>Наименование</strong></div></td>
    23.   <td bgcolor='#CCCCCC'><div align='center'><strong>Удалить</strong></div></td>
    24. </tr>
    25. ";
    26. $image_db = mysqli_query($db,"SELECT * FROM `images-goods` WHERE `article`='".$_POST['image']."'");
    27. if (!$image_db)
    28. {
    29. echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>";
    30. exit(mysqli_error());
    31. }
    32. if (mysqli_num_rows($image_db) > 0){
    33. $image_db_row = mysqli_fetch_array($image_db);
    34.     do
    35.     {
    36.     echo "
    37.     <tr>
    38.      <td><div align='center'><img src='".$image_db_row['image']."' style='width:80%;'></div></td>
    39.      <td valign='top'>
    40.      <form name='form1' method='POST' action='#add-image'>
    41.       <input type='hidden' name='image_id' value='".$image_db_row['id']."'>
    42.       <input class='input_submit' type='submit' value='Удалить'>
    43.      </form>
    44.      </td>
    45.     </tr>
    46.     ";
    47.     }
    48.     while ($image_db_row = mysqli_fetch_array($image_db));
    49. }
    50. else
    51. {
    52. echo "
    53. <tr>
    54.   <td colspan='2'><div align='center'>К сожалению в даннм товаре отсутствуют изоброжения.</div></td>
    55. </tr>
    56. ";
    57. }
    58. echo "</table>";
    59. }
    60. }
    61. else {
    62. $path = '../../image/product/'; // путь до папки куда сохранять, ./ считать от расположениея скрипта
    63. if (!is_dir($path)) {
    64.     mkdir($path, 0777, true);
    65. }
    66. $count = $_POST['count'] - 1;
    67. if (isset($_POST['submit']) && count($_FILES)) {
    68.     for ($i = 0; $i <= 10; $i++) {
    69.         $newnames = [];
    70.         if (!empty($_FILES['file']['name'][$i])) {
    71.             if ($info = getimagesize($_FILES['file']['tmp_name'][$i])) {
    72.                
    73.                 list($width, $height) = getimagesize($_FILES['file']['tmp_name'][$i]);
    74.                 $new_width = $width/2;
    75.                 $new_height = $height/2;
    76.                
    77.                 $image_p = imagecreatetruecolor($new_width, $new_height);
    78.                 $image = imagecreatefromstring(file_get_contents($_FILES['file']['tmp_name'][$i]));
    79.                 imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
    80.                
    81.                 $name = explode('.', $_FILES['file']['name'][$i]);
    82.                 // обработка и сохранение
    83.                 $newname = $path . uniqid("", True) . '.jpg'; // это имя для базы, даже путь полный, только имя можно получить например через basename();
    84.                 $newnames[] = $newname; // basename($name);
    85.                 imagejpeg($image_p, $newname);
    86.                
    87.                 $article = @$_POST["article"];
    88.                
    89.             } else {
    90.                 echo "
    91.                     <div align='center'><img src='../image/error.png'></div>
    92.                     <div align='center'>Вы не выбрали изображения.</div>
    93.                     <div align='center'><a href='module-add-image-goods.php' style='color:#000000; text-decoration:none;'><strong>Вернуться обратно</strong></a></div>
    94.                 ";
    95.                 exit();
    96.             }
    97.         } else {
    98.             continue;
    99.         }
    100.         $out[] = "('".$newname."', '".$article."')";
    101.     }}
    102.     if(!empty($out))
    103.     {
    104.         //echo implode(",", $out);
    105.         $query = mysqli_query ($db,"INSERT INTO `images-goods` (`image`, `article`) VALUES ".implode(",", $out));
    106.         echo "
    107.             <div align='center'><img src='../image/checked.png'></div>
    108.             <div align='center'>Вы успешно загрузили</div>
    109.             <div align='center'>изображение к товару.</div>
    110.             <div align='center'>
    111.              <form action='#add-image' method='post'>
    112.              <input type='hidden' name='image' value='".$_POST['article']."'>
    113.              <input class='input_submit' type='submit' value='OK'>
    114.              </form>
    115.             </div>
    116.         ";
    117.     }
    118.     else {
    119.         echo "
    120.             <div align='center'><img src='../image/error.png'></div>
    121.             <div align='center'> Вы не смогли загрузить</div>
    122.             <div align='center'>изображение, так как ничего не выбрали.</div>
    123.             <div align='center'>
    124.              <form action='#add-image' method='post'>
    125.              <input type='hidden' name='image' value='".$_POST['article']."'>
    126.              <input class='input_submit' type='submit' value='OK'>
    127.              </form>
    128.             </div>
    129.         ";
    130.     }
    131. }}
    132. else {
    133. $delete_image_db = mysqli_query($db,"SELECT * FROM `images-goods` WHERE `id`='".$_POST['image_id']."'");
    134. if (!$delete_image_db)
    135. {
    136. echo "<p>Запрос из выборки базы данных не прошел. Напишите об этом администратору. <em><strong>Код ошибки:</strong></em></p>";
    137. exit(mysqli_error());
    138. }
    139. if (mysqli_num_rows($delete_image_db) > 0){
    140. $delete_image_db_row = mysqli_fetch_array($delete_image_db);
    141. unlink($delete_image_db_row['image']);
    142. $drop = mysqli_query($db,"DELETE FROM `images-goods` WHERE `id`='".$delete_image_db_row['id']."'");
    143. echo "
    144.     <div align='center'><img src='../../image/checked.png'></div>
    145.     <div align='center'>Вы успешно удалили фотографию</div>
    146.     <div align='center'>из товара.</div>
    147.     <div align='center'><a href='' style='text-decoration:none'><div style='background:#4788C7; border:0; color:#FFFFFF; padding:0.5vw; margin-top:2px; margin-bottom:3px; width:100%; font-weight:bold; font-size:1.3vw;'>OK</div></a></div>
    148.     <div align='center'></div>
    149. ";
    150. }
    151. }
    152. ?>
    153. </div>
    154. </div>
    155. </div>
    156. </div>
    Но загрузка изображений порой портит весь стиль сайта. Теперь я подумал — чтобы этого избежать, мне нужно чтобы они были у меня все стандартного размера 2048 на 2048 пикселей.

    При загрузки изображение размер может быть 700 на 1024 пикселей или на оборот.
    Подскажите пожалуйста как можно сделать так — чтобы размер был квадратным, а само изображение было по центру и где свободное место остается, чтобы было белого или серого цвета?

    Заранее благодарю за помощь.
     
  2. kuzmich

    kuzmich Активный пользователь

    С нами с:
    6 мар 2017
    Сообщения:
    39
    Симпатии:
    0
    разобрался таким образом:

    Код (Text):
    1.         if (!empty($_FILES['file']['name'][$i])) {
    2.             if ($info = getimagesize($_FILES['file']['tmp_name'][$i])) {
    3.                
    4.                 list($width, $height) = getimagesize($_FILES['file']['tmp_name'][$i]);
    5.                 $width  = $info[0];
    6.                 $height = $info[1];
    7.                 // Высота 100px, ширина рассчитывается автоматически.
    8.                 $h = 2048;
    9.                 $w = 2048;
    10.                 //$w = ($h > $height) ? $width : ceil($h / ($height / $width));
    11.                
    12.                 $new_im = imageCreateTrueColor($w, $h);
    13.                 if ($info[2] == 1 || $info[2] == 3) {
    14.                     imagealphablending($new_im, true);
    15.                     imageSaveAlpha($new_im, true);
    16.                     $transparent = imagecolorallocatealpha($new_im, 0.00, 0.00, 0.00, 0.07);
    17.                     imagefill($new_im, 0, 0, $transparent);
    18.                     imagecolortransparent($new_im, $transparent);  
    19.                 }  
    20.  
    21.                
    22.                 $image = imagecreatefromstring(file_get_contents($_FILES['file']['tmp_name'][$i]));                
    23.                 $tw = ceil($h / ($height / $width));
    24.                 $th = ceil($w / ($width / $height));
    25. if ($tw < $w) {
    26.     imageCopyResampled($new_im, $image, ceil(($w - $tw) / 2), 0, 0, 0, $tw, $h, $width, $height);      
    27. } else {
    28.     imageCopyResampled($new_im, $image, 0, ceil(($h - $th) / 2), 0, 0, $w, $th, $width, $height);  
    29. }      
    30.                 //imageCopyResampled($new_im, $image, $xy[0], $xy[1], 0, 0, $xy[2], $xy[3], $width, $height);      
    31.                
    32.                 $name = explode('.', $_FILES['file']['name'][$i]);
    33.                 // обработка и сохранение
    34.                 $newname = $path . uniqid("", True) . '.jpg'; // это имя для базы, даже путь полный, только имя можно получить например через basename();
    35.                 $newnames[] = $newname; // basename($name);
    36.                 imagejpeg($new_im, $newname);
    37.                
    38.                 $article = @$_POST["article"];
    39.                
    40.             }
    теперь изображение загружаются так:[​IMG] [​IMG] [​IMG]

    как убрать черный цвет и поставить серый цвет(#EBECEC)?
     
  3. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    imagefilledrectangle() или imagefill(). описание на php.net