2015-01-16 4 views
0

Итак, у меня есть этот скрипт PHP для масштабирования и обрезки в квадрат от центра;Обрезание изображения до его загрузки на сервер

<?PHP 
//resize and crop image by center 
function resize_crop_image($max_width, $max_height, $source_file, $dst_dir, $quality = 80){ 
    $imgsize = getimagesize($source_file); 
    $width = $imgsize[0]; 
    $height = $imgsize[1]; 
    $mime = $imgsize['mime']; 

    switch($mime){ 
     case 'image/gif': 
      $image_create = "imagecreatefromgif"; 
      $image = "imagegif"; 
      break; 

     case 'image/png': 
      $image_create = "imagecreatefrompng"; 
      $image = "imagepng"; 
      $quality = 7; 
      break; 

     case 'image/jpeg': 
      $image_create = "imagecreatefromjpeg"; 
      $image = "imagejpeg"; 
      $quality = 80; 
      break; 

     default: 
      return false; 
      break; 
    } 

    $dst_img = imagecreatetruecolor($max_width, $max_height); 
    $src_img = $image_create($source_file); 

    $width_new = $height * $max_width/$max_height; 
    $height_new = $width * $max_height/$max_width; 
    //if the new width is greater than the actual width of the image, then the height is too large and the rest cut off, or vice versa 
    if($width_new > $width){ 
     //cut point by height 
     $h_point = (($height - $height_new)/2); 
     //copy image 
     imagecopyresampled($dst_img, $src_img, 0, 0, 0, $h_point, $max_width, $max_height, $width, $height_new); 
    }else{ 
     //cut point by width 
     $w_point = (($width - $width_new)/2); 
     imagecopyresampled($dst_img, $src_img, 0, 0, $w_point, 0, $max_width, $max_height, $width_new, $height); 
    } 

    $image($dst_img, $dst_dir, $quality); 

    if($dst_img)imagedestroy($dst_img); 
    if($src_img)imagedestroy($src_img); 
} 
//usage example 
resize_crop_image(100, 100, "test.jpg", "test.jpg");p_image(100, 100, "test.jpg", "test.jpg"); 
?> 

Вы можете просто вызвать следующую функцию:

resize_crop_image(100, 100, "test.jpg", "test.jpg");p_image(100, 100, "test.jpg", "test.jpg"); 

Добавлено в JSFiddle мой файл предварительного просмотра HTML5/JQuery перед загрузкой на сервер.

1). Нужно ли загружать изображение на сервер перед запуском этого скрипта?

2). Если вам нужна предварительная загрузка, как я могу использовать свою форму для загрузки во временное местоположение, выполните задание и перейдите в конкретный каталог и удалите временный каталог?

+0

ли вы имеете в виду следовать этот учебник: HTTP: // www.developphp.com/view.php?tid=1304 –

+1

1) Да, копия изображения должна быть на сервере, прежде чем вы сможете отредактировать/обрезать его. 2) Загруженные файлы автоматически сохраняются в каталоге temp (они обычно копируются для использования изображения, но не обязательно). Они могут быть прочитаны как изображение из каталога temp вашим кодом, и PHP также автоматически очистит файл в конце скрипта. –

+0

^@JonathanKuhn, первый вопрос теперь ясен, и кажется, что мой второй вопрос сделан для меня! –

ответ

2

1) Да, копия изображения должна быть на сервере, прежде чем вы сможете отредактировать/обрезать его. 2) Загруженные файлы автоматически сохраняются в каталоге temp (они обычно копируются для использования изображения, но не обязательно). Они могут быть прочитаны как изображение из каталога temp вашим кодом, и PHP также автоматически очистит файл в конце скрипта.

Когда файл загружается, в массиве $_FILES есть ключ с именем tmp. Вы можете просто передать это в свою функцию в качестве исходного файла, и он должен работать с imagecopyresampled без каких-либо проблем. Имя temp будет чем-то вроде $_FILES['nameFromFileFieldOnForm']['tmp_name'].

0

, если исходный файл или файл назначения

$source_file = www.example.com/storage/packages/image.jpg 

изменить его

$source_file = ./storage/packages/image.jpg 

Это работает для меня в Laravel 5