2013-09-14 5 views
24

У меня есть форма, где пользователь вставляет некоторые данные, а также загружает изображение.php изменить размер изображения при загрузке

Чтобы справиться с изображением, я получил следующий код:

define ("MAX_SIZE","10000"); 
$errors=0; 

$image =$_FILES["fileField"]["name"]; 
     $uploadedfile = $_FILES['fileField']['tmp_name']; 
     if($image){ 
      $filename = stripslashes($_FILES['fileField']['name']); 
      $extension = strtolower(getExtension($filename)); 
      if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")){ 
       echo ' Unknown Image extension '; 
       $errors=1; 
      } else{ 
       $newname = "$product_cn."."$extension"; 
       $size=filesize($_FILES['fileField']['tmp_name']); 
       if ($size > MAX_SIZE*1024){ 
       echo "You have exceeded the size limit"; 
       $errors=1; 
       } 
       if($extension=="jpg" || $extension=="jpeg"){ 
        $uploadedfile = $_FILES['file']['tmp_name']; 
        $src = imagecreatefromjpeg($uploadedfile); 
       }else if($extension=="png"){ 
        $uploadedfile = $_FILES['file']['tmp_name']; 
        $src = imagecreatefrompng($uploadedfile); 
       }else{ 
        $src = imagecreatefromgif($uploadedfile); 
       } 
       list($width,$height)=getimagesize($uploadedfile); 

       $newwidth=60; 
       $newheight=($height/$width)*$newwidth; 
       $tmp=imagecreatetruecolor($newwidth,$newheight); 

       $newwidth1=25; 
       $newheight1=($height/$width)*$newwidth1; 
       $tmp1=imagecreatetruecolor($newwidth1,$newheight1); 

       imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight, $width,$height); 

       imagecopyresampled($tmp1,$src,0,0,0,0,$newwidth1,$newheight1, $width,$height); 

       $filename = "../products_images/".$newname; 
       $filename1 = "../products_images/thumbs/".$newname; 

       imagejpeg($tmp,$filename,100); //file name also indicates the folder where to save it to 
       imagejpeg($tmp1,$filename1,100); 

       imagedestroy($src); 
       imagedestroy($tmp); 
       imagedestroy($tmp1); 

      } 
     } 

функция getExtension:

function getExtension($str) { 

     $i = strrpos($str,"."); 
     if (!$i) { return ""; } 
     $l = strlen($str) - $i; 
     $ext = substr($str,$i+1,$l); 
     return $ext; 
} 

Я написал некоторые обозначения в коде, так как им не очень знакомы с этими функциями ,

по некоторым причинам, не работает.

Когда я иду в папку «product_images» ИЛИ «product_images/thumbs», я не могу найти загруженное изображение.

Любая идея, что не так с моим кодом? должно быть изображение ширины 60 пикселей и изображение ширины 25 пикселей.

Примечание:

переменные, которые вы не знаете, где они были объявлены такие как $product_cn были объявлены до этого блока кода, который работает втирают отлично (тестировал). Если вы все еще хотите взглянуть на него, не стесняйтесь просить код.

Заранее благодарен!

ответ

27

Вот еще один хороший и простое решение:

 $maxDim = 800; 
     list($width, $height, $type, $attr) = getimagesize($_FILES['myFile']['tmp_name']); 
     if ($width > $maxDim || $height > $maxDim) { 
      $target_filename = $_FILES['myFile']['tmp_name']; 
      $fn = $_FILES['myFile']['tmp_name']; 
      $size = getimagesize($fn); 
      $ratio = $size[0]/$size[1]; // width/height 
      if($ratio > 1) { 
       $width = $maxDim; 
       $height = $maxDim/$ratio; 
      } else { 
       $width = $maxDim*$ratio; 
       $height = $maxDim; 
      } 
      $src = imagecreatefromstring(file_get_contents($fn)); 
      $dst = imagecreatetruecolor($width, $height); 
      imagecopyresampled($dst, $src, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); 
      imagedestroy($src); 
      imagepng($dst, $target_filename); // adjust format as needed 
      imagedestroy($dst); 
     } 

Ссылка:

PHP resize image proportionally with max width or weight

EDIT: Вымытый/упрощенный код немного (Спасибо @ ЯН-MIRUS для вашего комментария .)

 $maxDim = 800; 
     $file_name = $_FILES['myFile']['tmp_name']; 
     list($width, $height, $type, $attr) = getimagesize($file_name); 
     if ($width > $maxDim || $height > $maxDim) { 
      $target_filename = $file_name; 
      $ratio = $width/$height; 
      if($ratio > 1) { 
       $new_width = $maxDim; 
       $new_height = $maxDim/$ratio; 
      } else { 
       $new_width = $maxDim*$ratio; 
       $new_height = $maxDim; 
      } 
      $src = imagecreatefromstring(file_get_contents($file_name)); 
      $dst = imagecreatetruecolor($new_width, $new_height); 
      imagecopyresampled($dst, $src, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 
      imagedestroy($src); 
      imagepng($dst, $target_filename); // adjust format as needed 
      imagedestroy($dst); 
     } 
+2

Это работает, но я запутался - почему вы извлечь размеры изображения в два раза? –

+2

Это фантастика. Хотя в конце отсутствует очень важная строка: 'move_uploaded_file ($ _ FILES ['myFile'] ['tmp_name'], $ destinationFilePath);' – HerrimanCoder

+0

@ jan-mirus. Было указано, что ширина и ширина варов изменяются в средний. Это было некрасиво, и читать было легче. – zeusstl

0

Скачать l ibrary файл Zebra_Image.php Белу ссылка

https://drive.google.com/file/d/0Bx-7K3oajNTRV1I2UzYySGZFd3M/view

resizeimage.php

<?php 
    require 'Zebra_Image.php'; 
    // create a new instance of the class 
    $resize_image = new Zebra_Image(); 
    // indicate a source image 
    $resize_image->source_path = $target_file1; 
    $ext = $photo; 
    // indicate a target image 
    $resize_image->target_path = 'images/thumbnil/' . $ext; 
    // resize 
    // and if there is an error, show the error message 
    if (!$resize_image->resize(200, 200, ZEBRA_IMAGE_NOT_BOXED, -1)); 
    // from this moment on, work on the resized image 
    $resize_image->source_path = 'images/thumbnil/' . $ext; 
?> 
0

Вы можете использовать библиотеку Представьте себе также. Он использует GD и Imagick.

5

// Это был мой пример, который я использовал, чтобы автоматически изменить размер каждого вставленного фото до 100 на 50 пикселей и форматом изображения в формате JPEG надеюсь, что это помогает тоже

if($result){ 
$maxDimW = 100; 
$maxDimH = 50; 
list($width, $height, $type, $attr) = getimagesize($_FILES['photo']['tmp_name']); 
if ($width > $maxDimW || $height > $maxDimH) { 
    $target_filename = $_FILES['photo']['tmp_name']; 
    $fn = $_FILES['photo']['tmp_name']; 
    $size = getimagesize($fn); 
    $ratio = $size[0]/$size[1]; // width/height 
    if($ratio > 1) { 
     $width = $maxDimW; 
     $height = $maxDimH/$ratio; 
    } else { 
     $width = $maxDimW*$ratio; 
     $height = $maxDimH; 
    } 
    $src = imagecreatefromstring(file_get_contents($fn)); 
    $dst = imagecreatetruecolor($width, $height); 
    imagecopyresampled($dst, $src, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); 

    imagejpeg($dst, $target_filename); // adjust format as needed 


} 

move_uploaded_file($_FILES['pdf']['tmp_name'],"pdf/".$_FILES['pdf']['name']); 
+0

Хотя этот код может помочь решить проблему, он не объясняет _why_ и/или _how_, он отвечает на вопрос. Предоставление этого дополнительного контекста значительно улучшит его долгосрочную образовательную ценность. Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение, включая ограничения и допущения. –

+0

Лучший ответ - никакой библиотеки не требуется! move_uploaded_file - должен быть удален, так как imagejpeg переместите файл в новый пункт назначения $ target_filename – realmag777

0

Если вы хотите использовать Imagick из коробки (входит в состав большинства дистрибутивов PHP), это так же просто, как ...

$image = new Imagick(); 
$image_filehandle = fopen('some/file.jpg', 'a+'); 
$image->readImageFile($image_filehandle); 

$image->scaleImage(100,200,FALSE); 

$image_icon_filehandle = fopen('some/file-icon.jpg', 'a+'); 
$image->writeImageFile($image_icon_filehandle); 

Вы, вероятно, хотите, чтобы рассчитать ширину и высоту более динамически на основе исходного изображения. Вы можете получить текущую ширину и высоту изображения, используя приведенный выше пример, с помощью $ image-> getImageHeight(); и $ image-> getImageWidth() ;.

0

Эта вещь работала для меня. Нет никаких внешних liabraries используется

define ("MAX_SIZE","3000"); 
function getExtension($str) { 
     $i = strrpos($str,"."); 
     if (!$i) { return ""; } 
     $l = strlen($str) - $i; 
     $ext = substr($str,$i+1,$l); 
     return $ext; 
} 

$errors=0; 

if($_SERVER["REQUEST_METHOD"] == "POST") 
{ 
    $image =$_FILES["image-1"]["name"]; 
    $uploadedfile = $_FILES['image-1']['tmp_name']; 


    if ($image) 
    { 

     $filename = stripslashes($_FILES['image-1']['name']); 

     $extension = getExtension($filename); 
     $extension = strtolower($extension); 


if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) 
     { 
      echo "Unknown Extension..!"; 
     } 
     else 
     { 

$size=filesize($_FILES['image-1']['tmp_name']); 


if ($size > MAX_SIZE*1024) 
{ 
    echo "File Size Excedeed..!!"; 
} 


if($extension=="jpg" || $extension=="jpeg") 
{ 
$uploadedfile = $_FILES['image-1']['tmp_name']; 
$src = imagecreatefromjpeg($uploadedfile); 

} 
else if($extension=="png") 
{ 
$uploadedfile = $_FILES['image-1']['tmp_name']; 
$src = imagecreatefrompng($uploadedfile); 

} 
else 
{ 
$src = imagecreatefromgif($uploadedfile); 
echo $scr; 
} 

list($width,$height)=getimagesize($uploadedfile); 


$newwidth=1000; 
$newheight=($height/$width)*$newwidth; 
$tmp=imagecreatetruecolor($newwidth,$newheight); 


$newwidth1=1000; 
$newheight1=($height/$width)*$newwidth1; 
$tmp1=imagecreatetruecolor($newwidth1,$newheight1); 

imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height); 

imagecopyresampled($tmp1,$src,0,0,0,0,$newwidth1,$newheight1,$width,$height); 


$filename = "../images/product-image/Cars/". $_FILES['image-1']['name']; 

$filename1 = "../images/product-image/Cars/small". $_FILES['image-1']['name']; 



imagejpeg($tmp,$filename,100); 

imagejpeg($tmp1,$filename1,100); 

imagedestroy($src); 
imagedestroy($tmp); 
imagedestroy($tmp1); 
}} 

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