PHP 图像在飞行中调整大小
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP 图像在飞行中调整大小相关的知识,希望对你有一定的参考价值。
<?php
/**
* @file
* Describes the image resizing technique
*/
/**
* Here is an example of how to use this function
*
* File: i.php
if( $_GET['i'] ) {
require_once( "function.imageResize.php" );
$_GET['i'] = str_replace("..", "", $_GET['i']); // needs to be lower
$_GET['i'] = preg_replace("/^\//", "", $_GET['i']); // can't be hard coded
// set a min default
$_GET['w'] = intval( $_GET['w'] );
if( $_GET['w'] <= 0 ) {
$_GET['w'] = 50;
}
// set a min default
$_GET['h'] = intval( $_GET['h'] );
if( $_GET['h'] <= 0 ) {
$_GET['h'] = 50;
}
// call it.
if( file_exists( $_GET['i'] ) ) {
imageResize( $_GET['i'] , $_GET['w'] , $_GET['h'] );
}
}
*
* Called HTML: <img src="i.php?i=somefile_on_the_sever.jpg&width=500&height=400" />
*
*/
/**
* Resize an Image
*
* Output it to the browser.
*
* Does not cache, probably should. Maybe version 2.
*/
function imageResize( $source_image, $width = 200, $height = 150, $quality = 70, $crop = true )
{
// If the source image isn't an image seriously we got issues
if( ! $image_data = getimagesize( $source_image ) )
{
die( "Whoa can't get the image size of the original?" );
return false;
}
// Is it a gif, jpg or png. Sorry anything else probably not worth it.
switch( $image_data['mime'] )
{
case 'image/gif':
$get_func = 'imagecreatefromgif';
$suffix = ".gif";
break;
case 'image/jpeg';
$get_func = 'imagecreatefromjpeg';
$suffix = ".jpg";
break;
case 'image/png':
$get_func = 'imagecreatefrompng';
$suffix = ".png";
break;
}
// Setup some variables
$img_original = call_user_func( $get_func, $source_image );
$old_width = $image_data[0];
$old_height = $image_data[1];
$new_width = $width;
$new_height = $height;
$src_x = 0;
$src_y = 0;
$current_ratio = round( $old_width / $old_height, 2 );
$desired_ratio_after = round( $width / $height, 2 );
$desired_ratio_before = round( $height / $width, 2 );
// Some people don't want to upscale images. I don't care
// Uncomment if you want crash out and not upscale.
/*
if( $old_width < $width || $old_height < $height )
{
// The desired image size is bigger than the original image.
// Best not to do anything at all really.
return false;
}
*/
/**
* If the crop option is left on, it will take an image and best fit it
* so it will always come out the exact specified size.
*/
if( $crop )
{
/**
* create empty image of the specified size
*/
$new_image = imagecreatetruecolor( $width, $height );
/**
* Landscape Image
*/
if( $current_ratio > $desired_ratio_after )
{
$new_width = $old_width * $height / $old_height;
}
/**
* Nearly square ratio image.
*/
if( $current_ratio > $desired_ratio_before && $current_ratio < $desired_ratio_after )
{
if( $old_width > $old_height )
{
$new_height = max( $width, $height );
$new_width = $old_width * $new_height / $old_height;
}
else
{
$new_height = $old_height * $width / $old_width;
}
}
/**
* Portrait sized image
*/
if( $current_ratio < $desired_ratio_before )
{
$new_height = $old_height * $width / $old_width;
}
/**
* Find out the ratio of the original photo to it's new, thumbnail-based size
* for both the width and the height. It's used to find out where to crop.
*/
$width_ratio = $old_width / $new_width;
$height_ratio = $old_height / $new_height;
/**
* Calculate where to crop based on the center of the image
*/
$src_x = floor( ( ( $new_width - $width ) / 2 ) * $width_ratio );
$src_y = round( ( ( $new_height - $height ) / 2 ) * $height_ratio );
}
/**
* Don't crop the image, just resize it proportionally
*/
else
{
if( $old_width > $old_height )
{
$ratio = max( $old_width, $old_height ) / max( $width, $height );
}else{
$ratio = max( $old_width, $old_height ) / min( $width, $height );
}
$new_width = $old_width / $ratio;
$new_height = $old_height / $ratio;
$new_image = imagecreatetruecolor( $new_width, $new_height );
}
/**
* Where all the real magic happens
*/
imagecopyresampled( $new_image, $img_original, 0, 0, $src_x, $src_y, $new_width, $new_height, $old_width, $old_height );
/**
* Save it as a JPG File with our $destination_filename param.
*/
header('Content-Type: image/jpeg');
imagejpeg( $new_image, NULL, $quality );
/**
* Destroy the evidence!
*/
imagedestroy( $new_image );
imagedestroy( $img_original );
/**
* Return true because it worked and we're happy. Let the dancing commence!
*/
return true;
}
以上是关于PHP 图像在飞行中调整大小的主要内容,如果未能解决你的问题,请参考以下文章