Я получил форму, где пользователь вставляет некоторые данные, а также загружает изображение.
Чтобы обработать изображение, я получил следующий код:
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
были объявлены перед этим блоком кода, который работает нормально (проверено). Если вы все еще хотите взглянуть на него, не стесняйтесь просить код.
Заранее спасибо!
Вы можете использовать эту библиотеку для управления изображением во время загрузки. http://www.verot.net/php_class_upload.htm
Вот еще одно приятное и простое решение:
$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 изменяет размер изображения пропорционально максимальной ширине или весу
EDIT: Убрал / упростил код немного (спасибо @ jan-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 ); }
// Это был мой пример, который я использовал для автоматического изменения размера каждой вставленной фотографии до 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']);
Загрузить файл библиотеки Zebra_Image.php belo link
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; ?>
Вы также можете использовать библиотеку Imagine. Он использует GD и Imagick.
Если вы хотите использовать 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 () ;.