2016-08-11 2 views
0

Есть ли способ сохранить полученное изображение в двух местах, одно в исходном размере в папке, а другое в миниатюре (90, 120) в другой папке с использованием PHP. Соотношение сторон исходных изображений (3, 4), и мне просто нужно изменить размер ...
Уже мой код хорошо работает и может сохранить изображение в оригинальном размере.
Кстати, изображения отправляются из приложения Android.
здесь является PHP-код, чтобы сохранить изображение в папку и вставить данные в таблицу базы данных ...
Как сохранить полученное изображение в двух местах, одно в оригинальном размере, а другое - в размере эскизов, используя PHP

<?php 

    if ($_SERVER["REQUEST_METHOD"]=="POST") { 
     require 'connection.php'; 
     insertData(); 
    } 

    function insertData(){ 
     global $connect; 

     mysqli_set_charset($connect,"utf8"); 

     $name = $_POST["name"]; 
     $description = $_POST["description"]; 
     $image = $_POST["image"]; 

     $sql ="SELECT id FROM my_table ORDER BY name ASC"; 

     $res = mysqli_query($connect,$sql); 

     $id = 0; 

     while($row = mysqli_fetch_array($res)){ 
       $id = $row['id']; 
     } 

     $path = "img/$id.png"; 

     $decoded_string = base64_decode($image); 

     $file = fopen($path, 'wb'); 

     $is_written = fwrite($file, $decoded_string); 
     fclose($file); 

     $imgpath = "http://my-site.com/folder/$path"; 

     if($is_written > 0) { 

      $query = "INSERT INTO my_table (path,name,description) VALUES ('$imgpath','$name','$description ')"; 

      $result = mysqli_query($connect, $query) ; 

      if($result){ 
       echo "success"; 
      }else{ 
       echo "failed"; 
      } 

      mysqli_close($connect); 
     } 
    } 
?> 
+0

ли этот код на самом деле сохранить файл один раз? – RiggsFolly

+0

Вы можете использовать функцию для создания миниатюры следующим образом: http://stackoverflow.com/questions/11376315/creating-a-thumbnail-from-an-uploaded-image – grausof

+0

@RiggsFolly yes. Все нормально . Я делаю что-то не так в этом коде? Я не эксперт по php. – unknown

ответ

0

Так что я найти ответ, просто немного отличается от stweb ответа
здесь код

<?php 

if ($_SERVER["REQUEST_METHOD"]=="POST") { 
    require 'connection.php'; 
    insertData(); 
} 

function insertData(){ 
    global $connect; 

    mysqli_set_charset($connect,"utf8"); 

    $name = $_POST["name"]; 
    $description = $_POST["description"]; 
    $image = $_POST["image"]; 

    $sql ="SELECT id FROM my_table ORDER BY name ASC"; 

    $res = mysqli_query($connect,$sql); 

    $id = 0; 

    while($row = mysqli_fetch_array($res)){ 
      $id = $row['id']; 
    } 

    $path = "img/$id.png"; 
    $path_thumb = "thumb/$id.png"; 


    $decoded_string = base64_decode($image); 

    $file = fopen($path, 'wb'); 

    $is_written = fwrite($file, $decoded_string); 
    fclose($file); 

    $imgpath = "http://my-site.com/folder/$path"; 


    //---------------- create thumbnail ---------------- 

    $jpg_image = imagecreatefromjpeg($path); 

    $orig_w = imagesx($jpg_image); 
    $orig_h = imagesy($jpg_image); 
    $new_w = 120; 
    $new_h = 90; 

    $new_image = imagecreatetruecolor($new_w, $new_h); 
    imagecopyresampled($new_image, $jpg_image, 0, 0, 0, 0, $new_w, $new_h,$orig_w,$orig_h); 
    imagejpeg($new_image,$path_thumb); 

    $thumbpath = "http://my-site.com/folder/$path_thumb"; 

    //---------------- create thumbnail ---------------- 


    if($is_written > 0) { 

     $query = "INSERT INTO my_table (path,thumbnail,name,description) VALUES ('$imgpath','$thumbpath','$name','$description ')"; 

     $result = mysqli_query($connect, $query) ; 

     if($result){ 
      echo "success"; 
     }else{ 
      echo "failed"; 
     } 

     mysqli_close($connect); 
    } 
} 
?> 
0

Вам необходимо GD библиотеку, установленной на вашем сервере. Просто echo phpinfo(); и проверьте, включен ли его модуль.

Тогда: (. я не могу проверить сейчас, извините)

list($width, $height) = getimagesize($imgpath); 
$source = imagecreatefromjpeg($imgpath); 
$thumb = imagecreatetruecolor($thumb_width, $thumb_height);/ 

imagecopyresized($thumb, $source, 0, 0, 0, 0, $thumb_width, $thumb_height, $width, $height); 

imagejpeg($thumb, $path_to_thumb); 

Мы получаем размер исходного изображения и его содержание, то мы создаем пустое истинное цветное изображение. Мы копируем исходный контент на пустой образ, передавая как большой, так и оригинальный размер. Итак, мы сохраняем миниатюру, передаем изображение с большим пальцем и где оно будет сохранено.

+0

Спасибо, Вандерлей. Я проверю это. – unknown

1

Попробуйте это:

<?php 

if ($_SERVER["REQUEST_METHOD"]=="POST") { 
    require 'connection.php'; 
    insertData(); 
} 

function insertData(){ 
    global $connect; 

    mysqli_set_charset($connect,"utf8"); 

    $name = $_POST["name"]; 
    $description = $_POST["description"]; 
    $image = $_POST["image"]; 

    $sql ="SELECT id FROM my_table ORDER BY name ASC"; 

    $res = mysqli_query($connect,$sql); 

    $id = 0; 

    while($row = mysqli_fetch_array($res)){ 
      $id = $row['id']; 
    } 

    $path = "img/$id.png"; 
    $path_thumb = "thumb/$id.png"; 


    $decoded_string = base64_decode($image); 

    $file = fopen($path, 'wb'); 

    $is_written = fwrite($file, $decoded_string); 
    fclose($file); 
    $jpg_image = imagecreatefromjpeg($path); 

    $orig_w = imagesx($jpg_image); 
    $orig_h = imagesy($jpg_image); 
    $new_w = 90; 
    $new_h = round ((90 * $orig_h)/$orig_w); 

    $new_image = imagecreatetruecolor($new_w, $new_h); 
    imagecopyresampled($new_image, $jpg_image, 0, 0, 0, 0, $new_w, $new_h,$orig_w,$orig_h); 
    imagejpeg($new_image,$path_thumb,80); 


    $imgpath = "http://my-site.com/folder/$path"; 

    if($is_written > 0) { 

     $query = "INSERT INTO my_table (path,name,description) VALUES ('$imgpath','$name','$description ')"; 

     $result = mysqli_query($connect, $query) ; 

     if($result){ 
      echo "success"; 
     }else{ 
      echo "failed"; 
     } 

     mysqli_close($connect); 
    } 
} 
?> 

Не забудьте создать папку 'большой палец' рядом с папкой 'IMG'. И этот пример для jpeg-изображений. Если вам нужно отправить файл png, вам нужно вызвать imagecreatefrompng вместо imagecreatefromjpeg;

Смежные вопросы