PDA

View Full Version : کم کردن طول و عرض تصویر



olampiad
یک شنبه 06 مهر 1393, 12:14 عصر
سلام و خسته نباشید
من دنبال تابعی میگشتم که طول و عرض تصویر رو کاهش بده.
این تابع رو پیدا کردم ولی این تصویر طول و عرض رو کم نمکنه بلکه یک مقدار از تابع رو میبره.
آیا واسه کم کردن طول و عرض تصویر تابعی دارید.
ممنون




function thumbnail($img,$size,$imagebasename,$filetype)
{
$image = $img ;
$imagebasename="thumb".$imagebasename;
$width = $size[0];
$height = $size[1];

$image_dir = "";
$newwidth = 900 ;
$newheight = 900 ;


if($filetype == 'image/pjpeg' ) $src = imagecreatefromjpeg($image);
else if($filetype == 'image/gif' ) $src = imagecreatefromgif($image);
else if($filetype == 'image/jpeg' ) $src = imagecreatefromjpeg($image);

$im = imagecreatetruecolor($newwidth,$newheight);
imagecopyresampled($im,$src,0,0,0,0,$newwidth,$new height,$width,$height);

imagejpeg($im, "onee.jpg");
imagedestroy($im);
}


thumbnail("one.jpg",array(900,900),'one','image/jpeg');

hamidhassas
یک شنبه 06 مهر 1393, 12:22 عصر
با کمک کد زیر میتونی فقط ی مشکل داره اگه کسی تونست برطرف کنه بگه
مشکلش اینه که میخوام کاری کنم هر عکسی که برای آپلود قرار میدم حداکثر با عرض 1024 آپلود بشه یعنی اگه عکسی با اندازه 4000x3000 دادم عرض رو 1024 کنه و به صورت خودکار طول رو خودش محاسبه کنه مثلا بشه 1024x764



function resize($width, $height)
{
/* Get original image x y*/
list($w, $h) = getimagesize($_FILES['image']['tmp_name']);
/* calculate new image size with ratio */
$ratio = max($width/$w, $height/$h);
$h = ceil($height / $ratio);
$x = ($w - $width / $ratio) / 2;
$w = ceil($width / $ratio);
/* new file name */
$path = 'uploads/'.$width.'x'.$height.'_'.$_FILES['image']['name'];
/* read binary data from image file */
$imgString = file_get_contents($_FILES['image']['tmp_name']);
/* create image from string */
$image = imagecreatefromstring($imgString);
$tmp = imagecreatetruecolor($width, $height);
imagecopyresampled($tmp, $image,
0, 0,
$x, 0,
$width, $height,
$w, $h);
/* Save image */
switch ($_FILES['image']['type']) {
case 'image/jpeg':
imagejpeg($tmp, $path, 60);
break;
case 'image/png':
imagepng($tmp, $path, 0);
break;
case 'image/gif':
imagegif($tmp, $path);
break;
default:
exit;
break;
}
return $path;
/* cleanup memory */
imagedestroy($image);
imagedestroy($tmp);
}

// settings
$max_file_size = 4000*200; // 200kb
$valid_exts = array('jpeg', 'jpg', 'png', 'gif');
// thumbnail sizes
$sizes = array(1024 => 1024);

if ($_SERVER['REQUEST_METHOD'] == 'POST' AND isset($_FILES['image'])) {
if( $_FILES['image']['size'] < $max_file_size ){
// get file extension
$ext = strtolower(pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION));
if (in_array($ext, $valid_exts)) {
/* resize image */
foreach ($sizes as $w => $h) {
$files[] = resize($w, $h);
}

} else {
$msg = 'Unsupported file';
}
} else{
$msg = 'Please upload image smaller than 200KB';
}
}

if(isset($msg)):
echo '<p class="alert">'.$msg.'</p>';
endif;

if(isset($files))
{
foreach ($files as $image)
{
echo "<img class='img' src='{$image}' /><br /><br />";
}

Veteran
یک شنبه 06 مهر 1393, 13:05 عصر
مشکلش اینه که میخوام کاری کنم هر عکسی که برای آپلود قرار میدم حداکثر با عرض 1024 آپلود بشه یعنی اگه عکسی با اندازه 4000x3000 دادم عرض رو 1024 کنه و به صورت خودکار طول رو خودش محاسبه کنه مثلا بشه 1024x764

4000/(3000*1024)

hamidhassas
یک شنبه 06 مهر 1393, 22:55 عصر
4000/(3000*1024)


این که حجم فایله نه اندازه فایل
قسمتی که مربوط به اندازس اینه
$sizes = array(1024 => 1024);
اینجا طول و عرض تصویر رو 1024 قرار داده و هر عکسی که بدید اندازش 1024x1024 میشه

bagherok
یک شنبه 06 مهر 1393, 23:05 عصر
این که حجم فایله نه اندازه فایل
قسمتی که مربوط به اندازس اینه
$sizes = array(1024 => 1024);
اینجا طول و عرض تصویر رو 1024 قرار داده و هر عکسی که بدید اندازش 1024x1024 میشه

اشتباه نمیکنی!!!

olampiad
دوشنبه 07 مهر 1393, 15:57 عصر
سلام من این تابع رو از روی همین سایت پیدا کردم.
این تابع خیلی خوبه فقط حجم تصویر رو کم میکنه.
من میخوام سایز تصویر رو هم کم کنه.
آیا تابع کوتاهی مثل این تابع سراغ دارید.
ممنون





<?php



function Resize($file, $size) {
if(!file_exists($file)) {
return;
}
$im =imagecreatefromjpeg($file);
$quality = 100;
do {
imagejpeg($im, $file, $quality--);
} while(filesize($file) > $size && $quality > 20);
imagejpeg($im,'tt.jpg');
ImageDestroy($im);
}

Resize("ooo.jpg",20);

?>

hamidhassas
دوشنبه 07 مهر 1393, 16:11 عصر
اشتباه نمیکنی!!!
نه عزیزم اگه بخوای اندازه تصاویر تغییر کنه توی این کد اینجوری مثل زیر مینویسی بعد ابعاد تصویر به همون صورت برات تغییر و آپلود میشه


$sizes = array(100 => 100, 150 => 150, 250 => 250);

Veteran
دوشنبه 07 مهر 1393, 16:24 عصر
اون فرمول محسابه طول یود، مشکلی که داشتین!!!!

MMSHFE
دوشنبه 07 مهر 1393, 16:27 عصر
اینو تست کنید:

<?php
function resize($width, $height) {
// max 1024px wide
$width = min(1024, $width);
/* Get original image width and height */
list($w, $h) = getimagesize($_FILES['image']['tmp_name']);
/* calculate new image size with ratio */
$ratio = $w / $h;
$height = ceil($width / $ratio);
/* new file name */
$path = 'uploads/' . $width . 'x' . $height . '_' . $_FILES['image']['name'];
/* read binary data from image file */
$imgString = file_get_contents($_FILES['image']['tmp_name']);
/* create image from string */
$src = ImageCreateFromString($imgString);
$dst = ImageCreateTrueColor($width, $height);
ImageCopyResized($dst, $src, 0, 0, 0, 0, $width, $height, $w, $h);
/* Save image */
switch ($_FILES['image']['type']) {
case 'image/jpeg':
ImageJPEG($dst, $path, 60);
break;
case 'image/png':
ImagePNG($dst, $path, 0);
break;
case 'image/gif':
ImageGIF($dst, $path);
break;
default:
exit;
break;
}
return $path;
/* cleanup memory */
ImageDESTROY($dst);
ImageDESTROY($src);
}

// settings
$max_file_size = 4096 * 200; // 200kb
$valid_exts = array('jpeg', 'jpg', 'png', 'gif');
// thumbnail sizes
$sizes = array(1024 => 1024);

if ($_SERVER['REQUEST_METHOD'] == 'POST' AND isset($_FILES['image'])) {
if($_FILES['image']['size'] < $max_file_size) {
// get file extension
$ext = end(explode('.', $_FILES['image']['name']));
if (in_array($ext, $valid_exts)) {
/* resize image */
foreach ($sizes as $w => $h) {
$files[] = resize($w, $h);
}
}
else {
$msg = 'Unsupported file';
}
}
else {
$msg = 'Please upload image smaller than 200KB';
}
}

if(isset($msg)) {
echo '<p class="alert">' . $msg . '</p>' . PHP_EOL;
}

if(isset($files)) {
foreach ($files as $image) {
echo '<img class="img" src="' . $image . '" /><br />' . PHP_EOL;
}
}

hamidhassas
دوشنبه 07 مهر 1393, 23:28 عصر
اینو تست کنید:

<?php
function resize($width, $height) {
// max 1024px wide
$width = min(1024, $width);
/* Get original image width and height */
list($w, $h) = getimagesize($_FILES['image']['tmp_name']);
/* calculate new image size with ratio */
$ratio = $w / $h;
$height = ceil($width / $ratio);
/* new file name */
$path = 'uploads/' . $width . 'x' . $height . '_' . $_FILES['image']['name'];
/* read binary data from image file */
$imgString = file_get_contents($_FILES['image']['tmp_name']);
/* create image from string */
$src = ImageCreateFromString($imgString);
$dst = ImageCreateTrueColor($width, $height);
ImageCopyResized($dst, $src, 0, 0, 0, 0, $width, $height, $w, $h);
/* Save image */
switch ($_FILES['image']['type']) {
case 'image/jpeg':
ImageJPEG($dst, $path, 60);
break;
case 'image/png':
ImagePNG($dst, $path, 0);
break;
case 'image/gif':
ImageGIF($dst, $path);
break;
default:
exit;
break;
}
return $path;
/* cleanup memory */
ImageDESTROY($dst);
ImageDESTROY($src);
}

// settings
$max_file_size = 4096 * 200; // 200kb
$valid_exts = array('jpeg', 'jpg', 'png', 'gif');
// thumbnail sizes
$sizes = array(1024 => 1024);

if ($_SERVER['REQUEST_METHOD'] == 'POST' AND isset($_FILES['image'])) {
if($_FILES['image']['size'] < $max_file_size) {
// get file extension
$ext = end(explode('.', $_FILES['image']['name']));
if (in_array($ext, $valid_exts)) {
/* resize image */
foreach ($sizes as $w => $h) {
$files[] = resize($w, $h);
}
}
else {
$msg = 'Unsupported file';
}
}
else {
$msg = 'Please upload image smaller than 200KB';
}
}

if(isset($msg)) {
echo '<p class="alert">' . $msg . '</p>' . PHP_EOL;
}

if(isset($files)) {
foreach ($files as $image) {
echo '<img class="img" src="' . $image . '" /><br />' . PHP_EOL;
}
}
ممنون
ی سوال چطوری میتونم تو همین کد کاری کنم که اگر مقدار 888 ارسال شد ابعاد عکس تغییر نکنه و خود عکس با ابعاد اصلی خودش آپلود بشه

MMSHFE
سه شنبه 08 مهر 1393, 09:18 صبح
// max 1024px wide
$width = min(1024, $width);
/* Get original image width and height */
list($w, $h) = getimagesize($_FILES['image']['tmp_name']);
if($width == 888) {
/* Original width & height */
$width = $w;
$height = $h;
}
else {
/* Calculate new image size with ratio */
$ratio = $w / $h;
$height = ceil($width / $ratio);
}