อยากได้ โค้ด ลดขนาดรูปครับ

เริ่มโดย thespm, 18 พฤศจิกายน 2009, 22:27:54

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

thespm

คือ ผมทำเว็บเกี่ยวกับ อัลบั้มรูป แต่มีปัญหาที่รูปมีขนาดใหญ่เกินไปครับ (หมายถึงหน้าที่รวมรูปเล็กนะครับ)

จะทำยังไงดีให้รูปมันมีขนาดเล็กลง (เล็กลงเพื่อให้มัน load เร็วและประหยัด อีกด้วย)

ต้องใช้ ภาษาอะไรครับ

เช่น หน้าแสดงภาพรวม มี 15 รูป ตอนนี้ผมให้แสดงทั้ง 15 รูปที่มีขนาดเท่าของจริงเลยครับ

โดยการกำหนดให้มันเล็กลงเท่านั้นครับ แต่ขนาดที่มันโหลดยังเท่ากับขนาดเดิมอยู่ครับ

ต้องทำไงครับ

ขอบคุณครับ

Synchronize

อันนี้ตัวที่ผมใช้อยู่นะครับ ... ไม่รู้จะเครดิตใครดี เพราะ ใช้มานานจนลืมไปแล้วว่าเอามาจากไหน  :P

<?PHP
$ERR["UNABLE_TO_OUTPUT"] = "Unable to output: ";
$ERR["FILE_DOESNOT_EXSIT"] = "This file does not exist: ";
$ERR["FUNCTION_DOESNOT_EXIST"] = "This function does not exist: ";
$ERR["GD2_NOT_CREATED"] = "GD2 is installed, function ImageCreateTruecolor() exists, but image is not created";
$ERR["IMG_NOT_CREATED"] = "Image is not created ImageCreate(). {GD2 suppor is OFF}";
$ERR["GD2_UNAVALABLE"] = "You specified to use GD2, but not all GD2 functions are present.";
$ERR["GD2_NOT_RESIZED"] = "GD2 is installed, function ImageCopyResampled() exists, but image is not resized";
$ERR["IMG_NOT_RESIZED"] = "Image was not resized. {GD2 suppor is OFF}";
$ERR["UNKNOWN_OUTPUT_FORMAT"] = "This image format cannot bu output: ";
$ERR["NO_IMAGE_FOR_OUTPUT"] = "Image you are trying to output does not exist. ";
$ERR["IMG_NOT_SUPPORTED"] = "Can not create image. Sorry, this image type is not supported yet.";

//this class works with image
class Resize
{
var $image_original;
var $file_original;
var $image_original_width;
var $image_original_height;
var $image_original_type_code;
var $image_original_type_abbr;
var $image_original_html_sizes;

var $image_resized;
var $file_resized;
var $image_resized_width;
var $image_resized_height;
var $image_resized_type_code;
var $image_resized_type_abbr;
var $image_resized_html_sizes;

//some settings
var $jpeg_quality;
var $use_gd2;


function Resize($file_original)
{
//constructor of the class
//it takes given file and creates image out of it
global $ERR;
$this -> clear(); // clear all.

if(file_exists($file_original))
{
$this -> file_original = $file_original;
$this -> image_original = $this -> imagecreatefromfile($file_original);
if(!$this -> image_original)
{
$this -> error($ERR["IMAGE_NOT_CREATED_FROM_FILE"]." file=$file_original");
return false;
}
}
else
{
$this -> error($ERR["FILE_DOESNOT_EXSIT"]." file=$file_original");
}
}

function clear()
{
// clear all the class member varaibles

$this -> image_original = 0;
$this -> file_original = "";
$this -> image_original_width = 0;
$this -> image_original_height = 0;
$this -> image_original_type_code = 0;
$this -> image_original_type_abbr = "";
$this -> image_original_html_sizes= "";

$this -> image_resized = 0;
$this -> file_resized = "";
$this -> image_resized_width = 0;
$this -> image_resized_height = 0;
$this -> image_resized_type_code = -1;
$this -> image_resized_type_abbr = "";
$this -> image_resized_html_sizes = "";

$this -> set_parameters();
}

// jpeg_quality is image quality for out put images
// Default = 85 (Heigh)
function set_parameters($jpeg_quality="60", $use_gd2=true)
{
$this -> jpeg_quality=$jpeg_quality;
$this -> use_gd2=$use_gd2;
}

function error($msg)
{
//error messages and debug info:
// here you can implement your own error handling
//echo("<hr color='red'><font color='red'><b>$msg</b></font><hr color='red'>");
}


function imagecreatefromfile($img_file)
{
global $ERR;
$img=0;
$img_sz = getimagesize( $img_file ); ## returns array with some properties like dimensions and type;
####### Now create original image from uploaded file. Be carefull! GIF is often not supported, as far as I remember from GD 1.6
switch( $img_sz[2] )
{
case 1:
$img = $this -> _imagecheckandcreate("ImageCreateFromGif", $img_file);
$img_type = "GIF";
break;
case 2:
$img = $this -> _imagecheckandcreate("ImageCreateFromJpeg", $img_file);
$img_type = "JPG";
break;
case 3:
$img = $this -> _imagecheckandcreate("ImageCreateFromPng", $img_file);
$img_type = "PNG";
break;
// would be nice if this function will be finally supported
case 4:
$img = $this -> _imagecheckandcreate("ImageCreateFromSwf", $img_file);
$img_type = "SWF";
break;
default:
$img = 0;
$img_type = "UNKNOWN";
$this -> error($ERR["IMG_NOT_SUPPORTED"]." $img_file");
break;
}//case

if($img)
{
$this -> image_original_width=$img_sz[0];
$this -> image_original_height=$img_sz[1];
$this -> image_original_type_code=$img_sz[2];
$this -> image_original_type_abbr=$img_type;
$this -> image_original_html_sizes=$img_sz[3];
}
else
{
$this -> clear();
}

return $img;
}


function _imagecheckandcreate($function, $img_file)
{
//inner function used from imagecreatefromfile().
//Checks if the function exists and returns
//created image or false
global $ERR;
if(function_exists($function))
{
$img = $function($img_file);
}
else
{
$img = false;
$this -> error($ERR["FUNCTION_DOESNOT_EXIST"]." ".$function);
}

return $img;

}

function resizing($desired_width, $desired_height, $mode="-")
{
/*
this is core function--it resizes created image
if any of parameters == "*" then no resizing on this parameter
>> mode = "+" then image is resized to cover the region specified by desired_width, _height
>> mode = "-" then image is resized to fit into the region specified by desired_width, _height
width-to-height ratio is all the time the same
>> mode = "0" then image will be exactly resized to $desired_width _height.
geometrical distortion can occur in this case.
say u have picture 400x300 and there is circle on the picture
now u resized in mode=0 to 800x300 -- circle shape will be distorted and will look like ellipse.
GD2 provides much better quality but is not everywhere installed
*/
global $ERR;
if($desired_width == "*" && $desired_height == "*")
{
$this -> image_resized = $this -> image_original;
Return true;
}
switch($mode)
{
case "-":
case '+':
//multipliers
if($desired_width != "*")
$mult_x = $desired_width / $this -> image_original_width;
if($desired_height != "*")
$mult_y = $desired_height / $this -> image_original_height;
$ratio = $this -> image_original_width / $this -> image_original_height;

if($desired_width == "*")
{
$new_height = $desired_height;
$new_width = $ratio * $desired_height;
}
elseif($desired_height == "*")
{
$new_height = $desired_width / $ratio;
$new_width = $desired_width;
}
else
{
if($mode=="-")
{
if( $this -> image_original_height * $mult_x < $desired_height )
{
//image must be smaller than given $desired_ region
//test which multiplier gives us best result

//$mult_x does the job
$new_width = $desired_width;
$new_height = $this -> image_original_height * $mult_x;
}
else
{
//$mult_y does the job
$new_width = $this -> image_original_width * $mult_y;
$new_height = $desired_height;
}
}
else
{
//mode == "+"
// cover the region
//image must be bigger than given $desired_ region
//test which multiplier gives us best result
if( $this -> image_original_height * $mult_x > $desired_height ){
//$mult_x does the job
$new_width = $desired_width;
$new_height = $this -> image_original_height * $mult_x;
}else{
//$mult_y does the job
$new_width = $this -> image_original_width * $mult_y;
$new_height = $desired_height;
}

}
}
break;

case '0':
//fit the region exactly.
if($desired_width == "*") $desired_width = $this -> image_original_width;
if($desired_height == "*") $desired_height = $this -> image_original_height;
$new_width = $desired_width;
$new_height = $desired_height;

break;
default:
$this -> error($ERR["UNKNOWN_RESIZE_MODE"]." $mode");
break;
}

// OK here we have $new_width _height
//create destination image checking for GD2 functions:
if( $this -> use_gd2 )
{
if( function_exists("imagecreatetruecolor")){
$this -> image_resized = imagecreatetruecolor($new_width, $new_height) or $this -> error($ERR["GD2_NOT_CREATED"]);
}
else
{
$this -> error($ERR["GD2_UNAVALABLE"]." ImageCreateTruecolor()");
}
}
else
{
$this -> image_resized = imagecreate($new_width, $new_height) or $this -> error($ERR["IMG_NOT_CREATED"]);
}

//Resize
if( $this -> use_gd2 )
{
if( function_exists("imagecopyresampled"))
{
$res = imagecopyresampled($this -> image_resized,
$this -> image_original,
0, 0, //dest coord
0, 0, //source coord
$new_width, $new_height, //dest sizes
$this -> image_original_width, $this -> image_original_height // src sizes
) or $this -> error($ERR["GD2_NOT_RESIZED"]);
}
else
{
$this -> error($ERR["GD2_UNAVALABLE"]." ImageCopyResampled()");
}
}
else
{
$res = imagecopyresized($this -> image_resized,
$this -> image_original,
0, 0, //dest coord
0, 0, //source coord
$new_width, $new_height, //dest sizes
$this -> image_original_width, $this -> image_original_height // src sizes
) or $this -> error($ERR["IMG_NOT_RESIZED"]);
}
}

function output_original($destination_file, $image_type="JPG")
{
//outputs original image
//if destination file is empty image will be output to browser
// right now $image_type can be JPG or PNG
return _output_image($destination_file, $image_type, $this -> image_original);
}

function output_resized($destination_file, $image_type="JPG")
{
//if destination file is empty image will be output to browser
// right now $image_type can be JPG or PNG
$res = $this -> _output_image($destination_file, $image_type, $this -> image_resized);
if(trim($destination_file))
{
$sz=getimagesize($destination_file);
$this -> file_resized = $destination_file;
$this -> image_resized_width = $sz[0];
$this -> image_resized_height = $sz[1];
$this -> image_resized_type_code=$sz[2];
$this -> image_resized_html_sizes=$sz[3];
//only jpeg and png are really supported, but I'd like to think of future
switch($this -> image_resized_html_sizes)
{
case 0:
$this -> image_resized_type_abbr = "GIF";
break;
case 1:
$this -> image_resized_type_abbr = "JPG";
break;
case 2:
$this -> image_resized_type_abbr = "PNG";
break;
case 3:
$this -> image_resized_type_abbr = "SWF";
break;
default:
$this -> image_resized_type_abbr = "UNKNOWN";
break;
}

}
return $res;
}

function _output_image($destination_file, $image_type, $image)
{
//if destination file is empty image will be output to browser
// right now $image_type can be JPEG or PNG
global $ERR;
$destination_file = trim($destination_file);
$res = false;
if($image)
{
switch($image_type)
{
case 'JPEG':
case 'JPG':
$res = ImageJpeg($image, $destination_file, $this -> jpeg_quality);
break;
case 'PNG':
$res = Imagepng($image, $destination_file);
break;
default:
$this -> error($ERR["UNKNOWN_OUTPUT_FORMAT"]." $image_type");
break;
}
}
else
{
$this -> error($ERR["NO_IMAGE_FOR_OUTPUT"]);
}
if(!$res)
$this -> error($ERR["UNABLE_TO_OUTPUT"]." $destination_file");
return $res;
}
}
?>


ส่วนเวลาใช้งาน ใช้แบบนี้ นะครับ

$r = new Resize('___ ไฟล์ต้นทางที่จะย่อ ___');
$r -> resizing(100, 100, '+');

$r -> output_resized('___ ไฟล์ปลายที่ ที่ถูกย่อ ___.jpg', 'JPEG')


ตรง resizing ใส่ค่า 100, 100 ไว้นี่ หมายถึง ขนาดกว้าง กับ สูง นะครับ

ส่วน + ข้างหลัง เป็น option ตามนี้ + จะหมายถึง เวลาย่อ แล้ว กว้าง หรือสูง จะไม่น้อยกว่า 100 (เช่นย่อแล้ว กว้างได้ 100 แต่สูงอาจจะมากกว่า 100)

ถ้าใส่ - จะหมายถึง กว้างกะสูง จะไม่เกิน 100 (เช่นย่อแล้ว กว้างได้ 100 แต่สูงอาจจะน้อยกว่า 100)


ประมาณนี้น่ะครับ ผมว่าใช้ง่ายๆ class นี้

:wanwan017:
เนื้อหาความรู้น่าสนใจ ใหม่ๆ
[direct=https://develop.un-no.com/w3/docs/clear-float-in-div]เทคนิคการแก้ไขปัญหาจากการ float ซ้อน float แล้ว clear[/direct]

[direct=https://service.un-no.com/unbbz]ทำเว็บได้ด้วยตัวเองฟรี ด้วยระบบเว็บสำเร็จรูป unbbz , เว็บธรรมดา , เว็บบอร์ด , เว็บขายของ ทำได้หมดเลย[/direct]

SL_master

อ่า พอดีเลย ขอถามหน่อยครับ
ถ้าสมมุติ รูปเรา 300*300 ขนาด 50kb

และถ้าเราแก้แค่ img src="" width="100" height="100"
อยากรู้ว่า ขนาดไฟล์ จะลดลงหรือเปล่าครับ หรือ 50kb เท่าเดิม
[direct=http://www.ifcg.co.th]ที่ปรึกษาการเงิน[/direct]
[direct=http://www.ifcg.co.th]วางแผนการเงิน[/direct]

golfer007

อ้างถึงจาก: SL_master ใน 18 พฤศจิกายน 2009, 23:50:09
อ่า พอดีเลย ขอถามหน่อยครับ
ถ้าสมมุติ รูปเรา 300*300 ขนาด 50kb

และถ้าเราแก้แค่ img src="" width="100" height="100"
อยากรู้ว่า ขนาดไฟล์ จะลดลงหรือเปล่าครับ หรือ 50kb เท่าเดิม

โหลดที่ขนาดเท่าเดิมครับ

thespm

อ้างถึงจาก: Synchronize ใน 18 พฤศจิกายน 2009, 23:03:17
อันนี้ตัวที่ผมใช้อยู่นะครับ ... ไม่รู้จะเครดิตใครดี เพราะ ใช้มานานจนลืมไปแล้วว่าเอามาจากไหน  :P

<?PHP
$ERR["UNABLE_TO_OUTPUT"] = "Unable to output: ";
$ERR["FILE_DOESNOT_EXSIT"] = "This file does not exist: ";
$ERR["FUNCTION_DOESNOT_EXIST"] = "This function does not exist: ";
$ERR["GD2_NOT_CREATED"] = "GD2 is installed, function ImageCreateTruecolor() exists, but image is not created";
$ERR["IMG_NOT_CREATED"] = "Image is not created ImageCreate(). {GD2 suppor is OFF}";
$ERR["GD2_UNAVALABLE"] = "You specified to use GD2, but not all GD2 functions are present.";
$ERR["GD2_NOT_RESIZED"] = "GD2 is installed, function ImageCopyResampled() exists, but image is not resized";
$ERR["IMG_NOT_RESIZED"] = "Image was not resized. {GD2 suppor is OFF}";
$ERR["UNKNOWN_OUTPUT_FORMAT"] = "This image format cannot bu output: ";
$ERR["NO_IMAGE_FOR_OUTPUT"] = "Image you are trying to output does not exist. ";
$ERR["IMG_NOT_SUPPORTED"] = "Can not create image. Sorry, this image type is not supported yet.";

//this class works with image
class Resize
{
var $image_original;
var $file_original;
var $image_original_width;
var $image_original_height;
var $image_original_type_code;
var $image_original_type_abbr;
var $image_original_html_sizes;

var $image_resized;
var $file_resized;
var $image_resized_width;
var $image_resized_height;
var $image_resized_type_code;
var $image_resized_type_abbr;
var $image_resized_html_sizes;

//some settings
var $jpeg_quality;
var $use_gd2;


function Resize($file_original)
{
//constructor of the class
//it takes given file and creates image out of it
global $ERR;
$this -> clear(); // clear all.

if(file_exists($file_original))
{
$this -> file_original = $file_original;
$this -> image_original = $this -> imagecreatefromfile($file_original);
if(!$this -> image_original)
{
$this -> error($ERR["IMAGE_NOT_CREATED_FROM_FILE"]." file=$file_original");
return false;
}
}
else
{
$this -> error($ERR["FILE_DOESNOT_EXSIT"]." file=$file_original");
}
}

function clear()
{
// clear all the class member varaibles

$this -> image_original = 0;
$this -> file_original = "";
$this -> image_original_width = 0;
$this -> image_original_height = 0;
$this -> image_original_type_code = 0;
$this -> image_original_type_abbr = "";
$this -> image_original_html_sizes= "";

$this -> image_resized = 0;
$this -> file_resized = "";
$this -> image_resized_width = 0;
$this -> image_resized_height = 0;
$this -> image_resized_type_code = -1;
$this -> image_resized_type_abbr = "";
$this -> image_resized_html_sizes = "";

$this -> set_parameters();
}

// jpeg_quality is image quality for out put images
// Default = 85 (Heigh)
function set_parameters($jpeg_quality="60", $use_gd2=true)
{
$this -> jpeg_quality=$jpeg_quality;
$this -> use_gd2=$use_gd2;
}

function error($msg)
{
//error messages and debug info:
// here you can implement your own error handling
//echo("<hr color='red'><font color='red'><b>$msg</b></font><hr color='red'>");
}


function imagecreatefromfile($img_file)
{
global $ERR;
$img=0;
$img_sz = getimagesize( $img_file ); ## returns array with some properties like dimensions and type;
####### Now create original image from uploaded file. Be carefull! GIF is often not supported, as far as I remember from GD 1.6
switch( $img_sz[2] )
{
case 1:
$img = $this -> _imagecheckandcreate("ImageCreateFromGif", $img_file);
$img_type = "GIF";
break;
case 2:
$img = $this -> _imagecheckandcreate("ImageCreateFromJpeg", $img_file);
$img_type = "JPG";
break;
case 3:
$img = $this -> _imagecheckandcreate("ImageCreateFromPng", $img_file);
$img_type = "PNG";
break;
// would be nice if this function will be finally supported
case 4:
$img = $this -> _imagecheckandcreate("ImageCreateFromSwf", $img_file);
$img_type = "SWF";
break;
default:
$img = 0;
$img_type = "UNKNOWN";
$this -> error($ERR["IMG_NOT_SUPPORTED"]." $img_file");
break;
}//case

if($img)
{
$this -> image_original_width=$img_sz[0];
$this -> image_original_height=$img_sz[1];
$this -> image_original_type_code=$img_sz[2];
$this -> image_original_type_abbr=$img_type;
$this -> image_original_html_sizes=$img_sz[3];
}
else
{
$this -> clear();
}

return $img;
}


function _imagecheckandcreate($function, $img_file)
{
//inner function used from imagecreatefromfile().
//Checks if the function exists and returns
//created image or false
global $ERR;
if(function_exists($function))
{
$img = $function($img_file);
}
else
{
$img = false;
$this -> error($ERR["FUNCTION_DOESNOT_EXIST"]." ".$function);
}

return $img;

}

function resizing($desired_width, $desired_height, $mode="-")
{
/*
this is core function--it resizes created image
if any of parameters == "*" then no resizing on this parameter
>> mode = "+" then image is resized to cover the region specified by desired_width, _height
>> mode = "-" then image is resized to fit into the region specified by desired_width, _height
width-to-height ratio is all the time the same
>> mode = "0" then image will be exactly resized to $desired_width _height.
geometrical distortion can occur in this case.
say u have picture 400x300 and there is circle on the picture
now u resized in mode=0 to 800x300 -- circle shape will be distorted and will look like ellipse.
GD2 provides much better quality but is not everywhere installed
*/
global $ERR;
if($desired_width == "*" && $desired_height == "*")
{
$this -> image_resized = $this -> image_original;
Return true;
}
switch($mode)
{
case "-":
case '+':
//multipliers
if($desired_width != "*")
$mult_x = $desired_width / $this -> image_original_width;
if($desired_height != "*")
$mult_y = $desired_height / $this -> image_original_height;
$ratio = $this -> image_original_width / $this -> image_original_height;

if($desired_width == "*")
{
$new_height = $desired_height;
$new_width = $ratio * $desired_height;
}
elseif($desired_height == "*")
{
$new_height = $desired_width / $ratio;
$new_width = $desired_width;
}
else
{
if($mode=="-")
{
if( $this -> image_original_height * $mult_x < $desired_height )
{
//image must be smaller than given $desired_ region
//test which multiplier gives us best result

//$mult_x does the job
$new_width = $desired_width;
$new_height = $this -> image_original_height * $mult_x;
}
else
{
//$mult_y does the job
$new_width = $this -> image_original_width * $mult_y;
$new_height = $desired_height;
}
}
else
{
//mode == "+"
// cover the region
//image must be bigger than given $desired_ region
//test which multiplier gives us best result
if( $this -> image_original_height * $mult_x > $desired_height ){
//$mult_x does the job
$new_width = $desired_width;
$new_height = $this -> image_original_height * $mult_x;
}else{
//$mult_y does the job
$new_width = $this -> image_original_width * $mult_y;
$new_height = $desired_height;
}

}
}
break;

case '0':
//fit the region exactly.
if($desired_width == "*") $desired_width = $this -> image_original_width;
if($desired_height == "*") $desired_height = $this -> image_original_height;
$new_width = $desired_width;
$new_height = $desired_height;

break;
default:
$this -> error($ERR["UNKNOWN_RESIZE_MODE"]." $mode");
break;
}

// OK here we have $new_width _height
//create destination image checking for GD2 functions:
if( $this -> use_gd2 )
{
if( function_exists("imagecreatetruecolor")){
$this -> image_resized = imagecreatetruecolor($new_width, $new_height) or $this -> error($ERR["GD2_NOT_CREATED"]);
}
else
{
$this -> error($ERR["GD2_UNAVALABLE"]." ImageCreateTruecolor()");
}
}
else
{
$this -> image_resized = imagecreate($new_width, $new_height) or $this -> error($ERR["IMG_NOT_CREATED"]);
}

//Resize
if( $this -> use_gd2 )
{
if( function_exists("imagecopyresampled"))
{
$res = imagecopyresampled($this -> image_resized,
$this -> image_original,
0, 0, //dest coord
0, 0, //source coord
$new_width, $new_height, //dest sizes
$this -> image_original_width, $this -> image_original_height // src sizes
) or $this -> error($ERR["GD2_NOT_RESIZED"]);
}
else
{
$this -> error($ERR["GD2_UNAVALABLE"]." ImageCopyResampled()");
}
}
else
{
$res = imagecopyresized($this -> image_resized,
$this -> image_original,
0, 0, //dest coord
0, 0, //source coord
$new_width, $new_height, //dest sizes
$this -> image_original_width, $this -> image_original_height // src sizes
) or $this -> error($ERR["IMG_NOT_RESIZED"]);
}
}

function output_original($destination_file, $image_type="JPG")
{
//outputs original image
//if destination file is empty image will be output to browser
// right now $image_type can be JPG or PNG
return _output_image($destination_file, $image_type, $this -> image_original);
}

function output_resized($destination_file, $image_type="JPG")
{
//if destination file is empty image will be output to browser
// right now $image_type can be JPG or PNG
$res = $this -> _output_image($destination_file, $image_type, $this -> image_resized);
if(trim($destination_file))
{
$sz=getimagesize($destination_file);
$this -> file_resized = $destination_file;
$this -> image_resized_width = $sz[0];
$this -> image_resized_height = $sz[1];
$this -> image_resized_type_code=$sz[2];
$this -> image_resized_html_sizes=$sz[3];
//only jpeg and png are really supported, but I'd like to think of future
switch($this -> image_resized_html_sizes)
{
case 0:
$this -> image_resized_type_abbr = "GIF";
break;
case 1:
$this -> image_resized_type_abbr = "JPG";
break;
case 2:
$this -> image_resized_type_abbr = "PNG";
break;
case 3:
$this -> image_resized_type_abbr = "SWF";
break;
default:
$this -> image_resized_type_abbr = "UNKNOWN";
break;
}

}
return $res;
}

function _output_image($destination_file, $image_type, $image)
{
//if destination file is empty image will be output to browser
// right now $image_type can be JPEG or PNG
global $ERR;
$destination_file = trim($destination_file);
$res = false;
if($image)
{
switch($image_type)
{
case 'JPEG':
case 'JPG':
$res = ImageJpeg($image, $destination_file, $this -> jpeg_quality);
break;
case 'PNG':
$res = Imagepng($image, $destination_file);
break;
default:
$this -> error($ERR["UNKNOWN_OUTPUT_FORMAT"]." $image_type");
break;
}
}
else
{
$this -> error($ERR["NO_IMAGE_FOR_OUTPUT"]);
}
if(!$res)
$this -> error($ERR["UNABLE_TO_OUTPUT"]." $destination_file");
return $res;
}
}
?>


ส่วนเวลาใช้งาน ใช้แบบนี้ นะครับ

$r = new Resize('___ ไฟล์ต้นทางที่จะย่อ ___');
$r -> resizing(100, 100, '+');

$r -> output_resized('___ ไฟล์ปลายที่ ที่ถูกย่อ ___.jpg', 'JPEG')


ตรง resizing ใส่ค่า 100, 100 ไว้นี่ หมายถึง ขนาดกว้าง กับ สูง นะครับ

ส่วน + ข้างหลัง เป็น option ตามนี้ + จะหมายถึง เวลาย่อ แล้ว กว้าง หรือสูง จะไม่น้อยกว่า 100 (เช่นย่อแล้ว กว้างได้ 100 แต่สูงอาจจะมากกว่า 100)

ถ้าใส่ - จะหมายถึง กว้างกะสูง จะไม่เกิน 100 (เช่นย่อแล้ว กว้างได้ 100 แต่สูงอาจจะน้อยกว่า 100)


ประมาณนี้น่ะครับ ผมว่าใช้ง่ายๆ class นี้

:wanwan017:

เป็นการย่อรูปแล้วโหลดรูปในขนาดที่เล็กลงถูกป่าวครับ

Synchronize

ถูกแล้วครับ ... จะเป็นการ resize รูปให้เล็กลง ประมาณว่าสร้าง thumbnail น่ะครับ

:wanwan017:
เนื้อหาความรู้น่าสนใจ ใหม่ๆ
[direct=https://develop.un-no.com/w3/docs/clear-float-in-div]เทคนิคการแก้ไขปัญหาจากการ float ซ้อน float แล้ว clear[/direct]

[direct=https://service.un-no.com/unbbz]ทำเว็บได้ด้วยตัวเองฟรี ด้วยระบบเว็บสำเร็จรูป unbbz , เว็บธรรมดา , เว็บบอร์ด , เว็บขายของ ทำได้หมดเลย[/direct]

presto

เข้ามาหาความรู้ ยอดเลยครับ :wanwan031:
[direct=http://diamondjews.blogspot.com]UNDRESS A GIRL[/direct]
[direct=http://astore.amazon.com/presto- coffee-maker-20]COFFEE MAKER[/direct]
[direct=http://astore.amazon.com/cuisinart.12-cup.coffee.maker-20]CUISINART[/direct]

thespm


นายขนมต้ม

#8
if($_FILES['file']['tmp_name'] != "") { //เช็คว่ามีการอัปรูป
copy($_FILES['file']['tmp_name'], "upload_file/".$_FILES['file']['name']); //ทำการ copy รูป

$images = "upload_file/".$_FILES['file']['name'];
$height = 400; //กำหนดขนาดความสูง
$size = getimagesize($images);
$width = round($height*$size[0]/$size[1]); //ขนาดความกว้่างคำนวนเพื่อความสมส่วนของรูป
if($size[2] == 1) {
$images_orig = imagecreatefromgif($images); //resize รูปประเภท GIF
} else if($size[2] == 2) {
$images_orig = imagecreatefromjpeg($images); //resize รูปประเภท JPEG
}
$photoX = imagesx($images_orig);
$photoY = imagesy($images_orig);
$images_fin = imagecreatetruecolor($width, $height);
imagecopyresampled($images_fin, $images_orig, 0, 0, 0, 0, $width+1, $height+1, $photoX, $photoY);
imagejpeg($images_fin, $images); //ชื่อไฟล์ใหม่
imagedestroy($images_orig);
imagedestroy($images_fin);

นี่หรือป่าวคัรบ ผมทำแบบนี้นะ ไม่รุ้ว่าใช้หรือป่าว แต่มัน resize รูปนะ
ขาย ACC Google Adsend รับPinแล้ว Acc8ปีสายขาว รับเงินยาวววว เงินค้าง89$

[direct=http://www.rayongcaraudio.com/]carAudio[/direct] | [direct=http://www.roietweb.com]ร้อยเอ็ด[/direct] |

thespm

คือ ที่พี่ๆ ตอบมานะครับ มันเป็นโค้ดลดรูปจริงนะแหละ แต่มันเป็นการสร้าง รูปขึ้นมาใหม่นิครับ

ผมต้องการที่ใช้รูปเดิม แล้วสั่งให้โหลดในขนาดที่เรากำหนด เช่น รูป 800+600 อยากจะให้มันโหลดมาแค่ 400*300 ครับ

แต่ไม่ใช้การย่อแล้วบันทึกเป็นรูปใหม่นะครับแต่จะเป็นการนำเอารูปเดิมมาใช้ แต่โหลดน้อยลง ยิ่งพูดยิ่ง งง

สรุปนะครับ คือ มีรูป แล้วต้องการแสดงรูปออกมาในหน้ารวมรูป แล้วก็คลิกเข้าไปดูรูปใหญ่อีกทีนะครับ

แต่ในตอนที่แสดงในหน้ารวมนะครับ ใช้ไฟล์ตัวเดวกับ ไฟล์ที่ใช้แสดงรูปใหญ่เลยนะครับ แต่โหลดน้อยกว่า นะครับ น่าจะพอเข้าใจนะครับ

คือจะทำ ทำเนียบรูปรุ่นอ่ะ

(ที่จะทำแบบนี้เพื่อประหยัด พื้นที่จัดเก็บ มีน้อยอ่ะ อิอิ แบนวิช ด้วย)


ขอบคุณล้วงหน้านะครับ

นายขนมต้ม

ก็เหมือนกันคับ คือจะทำเป็น thumbnails หรือป่าว แต่ต้องแปลงcode อีกนิดหน่อย
ขาย ACC Google Adsend รับPinแล้ว Acc8ปีสายขาว รับเงินยาวววว เงินค้าง89$

[direct=http://www.rayongcaraudio.com/]carAudio[/direct] | [direct=http://www.roietweb.com]ร้อยเอ็ด[/direct] |

chui761

เท่าที่เข้าใจ
ยังไงก็น่าจะต้องสร้าง thumbnail เก็บเป็นเหมือนรูปใหม่อยู่ดีนะครับ อาจจะเก็บไว้คนละโฟลเดอร์กับรูปจริง

และ thumbnail ใหม่นี้ปกติมันก็ไม่ได้มีขนาดไฟล์ใหญ่เท่าไหร่นะครับ ก็ไม่น่าจะกินแบนวิท หรือพื้นที่มากมาย

แต่ถ้าเข้าใจผิดก็ขออภัย
[direct=http://secure.hostgator.com/~affiliat/cgi-bin/affiliates/clickthru.cgi?id=amazonnrr]เช่าโฮสเกเตอร์ Promotion ลด 50% click[/direct]|
Hostgator คูปอง Baby plan เดือนแรก 0.01$=TSBSAVE001 หลายเดือนลด 25%=TSBSAVE025 |[direct=http://www.amzhowto.com/websitemap/]สอน Clickbank Amazon CPA/Payday Viglink เช่าโฮสต์นอก จดโดเมนราคาถูก[/direct]
[direct=http://support.hostneverdie.com/aff.php?aff=156]เช่าโฮสต์ไทย hostneverdie[/direct]
[direct=http://hosterbox.com/billing/aff.php?aff=139]Hosterbox Host นอกราคาประหยัด คุณภาพดีไม่แพ้ gator[/direct]

bubbleball

เหมือน imageResize  plugin ของ smf  เวลาแปะรูป ถ้าเกิดขนาดที่ต้องการมันจะย่อลงมาให้เองอัตโนมัติ แล้วจะขึ้นบอกว่าสามารถกดดูรูปขนาดเต็มได้ ในหน้านั้น หรือเปิดหน้าใหม่ น่าจะลองเอาตัวนั้นมาแกะดูฟังก์ชั่นมันได้อ่ะนะ

ball6847

ที่เค้าให้มามันก็ถูกต้องแล้วครับ

สิ่งที่ต้องทำก็คือ ตอนอับโหลดไม่ใช่แค่อับโหลดก็จบ สิ่งที่ต้องทำคือสร้าง thumbnail ด้วย ก็ใช้โค้ดที่ข้างบนให้ๆไปนั่นแหละครับ สรุป คือ 1 รูป จะได้รูปจริงกับเล็ก ต้องเปลืองพื้นที่อีกนิดนึง

พอไอ้หน้าที่รวมรูปเนี่ย เราก็เอา url ของรูปเล็กไปแสดง พอคลิ้กเข้ามาเราก็แสดงรูปใหญ่ มันต้องป็นแบบนี้ครับ

แต่ที่เจ้าของกระทู้ต้องการคือ คงไม่อยากจะสร้างใหม่ให้เอารูปเดิมมาสร้าง thumbnail แล้วแสดงแบบย่อส่วนณเดี๋ยวนั้นเลย คือจะทำมันก็ทำได้ แต่ถ้าเป็น shared host ก็รอวันโดนเตะได้เลย เพราะ php ทำงานกับรูปภาพจะใช้ cpu และ memory มากกว่าปกติ คิดง่ายๆ รูปใหญ่เท่าไหร่ใช้ memory เท่านั้น เราเปิด 1 หน้ารวมรูปสมมุติมีรูป 20 รูป มันจะใช้ cpu และ memory ไปเท่าไหร่แล้วครับ แต่ถ้าเป็นเครื่องตัวเองก็หมดห่วงครับ

ผมมีคลาสแนะนำผมใช้ประจำหากต้องทำงานกับรูปภาพครับ

http://phpthumb.gxdlabs.com/

ปล  แบนวิด พื้นที่ cpu และ memory ถ้าต้องแลกผมขอเอาพื้นที่ไปแลกดีกว่า
We use Ubuntu.

[direct=http://ng-seo.sourcelab.xyz/]AngularJS SEO Experimental[/direct]

g-ji

#14
เมื่อก่อนเคยใช้แบบนี้

CSS magic


.resizesmall{
width: 80px;
height : auto;
}

.resizesmall{
width: auto;
height : 50px;
}
.resizethumbnail {
width: 140px;
height : auto;
}

.resizethumbnail{
width: auto;
height : 140px;
}

.resizemedium {
width: 400px;
height : auto;
}

.resizemedium{
width: auto;
height : 250px;
}

.resizelarge{
width: 500px;
height : auto;
}

.resizelarge{
width: auto;
height : 350px;
}


เอาใส่ไว้ในไฟล์ CSS นะ

เวลาใช้งานก็

<img src="ที่อยู่รูป" class="resizemedium" />

รูปมันจะย่อเหลือขนาดไม่เกิน 400 * 250 (แล้วแต่กำหนดขนาด) ลองเอาไปเล่นดูจิ ใช้ไฟล์รูปเดิม แต่ข้อเสียคือ รูปมันจะไม่ชัด และขนาดไฟล์เท่าเดิม - -*

ตอนหลังเลือกเปลี่ยนมาใช้ Timthumb แทน รูปชัดดี แล้วก็ไม่กิน ทรัพยากรโฮสมากเท่าไร (สร้างไฟล์แคชรูป ขนาดเล็ก อ่า... โคตรเล็ก แล้วลบอัตโนมัติ ทุก 30 วัน แต่จี้ตั้งไว้ไม่ต้องลบ เพราะใช้รูปเดียวถาวร มันจะดึงรูปนั้นมาใช้ตลอด)

timthumb
http://www.darrenhoyt.com/2008/04/02/timthumb-php-script-released/

thespm

ขอบคุณทุกคนมากครับ

ผมว่าผมลงทุนใช้ พื้นที่ดีกว่าครับ ดีกว่าโดนเตะ อิอิ

SL_master

การโหลดรูปขึ้นมาผมว่าไม่น่าจะถึงขั้นโดนเตะมั๊งครับ
มันจะกินแค่แบนวิท เป็นช่วงๆ
ไม่เหมือนการใช้คำสั่งดึงดาต้าเบส ซึ่งจะกินแรม และ cpu มาก

ถ้าเวปแค่โชว์รูปอย่างเดียว คงไม่น่าจะมีปัญหามั๊งครับ
ถ้าเราเป็นแพคเกจที่แบทวิทunlimit หรือ ได้แพคเกจที่ใช้แบนวิทได้เยอะ
[direct=http://www.ifcg.co.th]ที่ปรึกษาการเงิน[/direct]
[direct=http://www.ifcg.co.th]วางแผนการเงิน[/direct]