2012-01-19 69 views
2

我需要先按比例调整图像大小(宽度是重要尺寸),然后裁剪任何多余的高度,然后将新版本存储在目录中。在GD库中调整大小后裁剪图像

我已经设法调整大小的罚款,我最终与我的目录中正确的宽度的图像。有些人在这里需要裁剪多余的高度。但我无法弄清楚我需要做什么。我是否需要以某种方式使用copyimageresampled。我想裁剪所有图像,使其高度为50像素。

这里是我迄今为止FO调整大小:

$src = ImageCreateFromJpeg($upfile); 
$dst = ImageCreateTrueColor($tn_width, $tn_height); 
ImageCopyResized($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height, $width, $height); 
ImageJpeg($dst, 'images/' . $_FILES['image']['name']); 

回答

-1

Croping就像与调整GD

一些示例代码:

// Original image 
$filename = 'someimage.jpg'; 

// Get dimensions of the original image 
list($current_width, $current_height) = getimagesize($filename); 

// The x and y coordinates on the original image where we 
// will begin cropping the image 
$left = 50; 
$top = 50; 

// This will be the final size of the image (e.g. how many pixels 
// left and down we will be going) 
$crop_width = 200; 
$crop_height = 200; 

// Resample the image 
$canvas = imagecreatetruecolor($crop_width, $crop_height); 
$current_image = imagecreatefromjpeg($filename); 
imagecopy($canvas, $current_image, 0, 0, $left, $top, $current_width, $current_height); 
imagejpeg($canvas, $filename, 100); 

定义您的作物宽度&高度,应该全部设定。它只不过是一个调整大小,你可以看到。

参考:http://www.johnconde.net/blog/cropping-an-image-with-php-and-the-gd-library/

+0

除非我错看了你的回复我之后有点微妙的不同。我不想放弃全尺寸的图像。我想先按照正确的宽度按比例调整大小,然后从调整大小的图像中切掉多余的高度。我认为上面的代码只是裁剪一个全尺寸的图像? –

+0

@elduderino,你正在描述一个作物,不管你是否调整大小,作物定义了'新'图像的尺寸,并切断了其他部分(高度/宽度),只需从'$ left'和'$顶部坐标,(0和0),并定义裁剪的最终尺寸(比如说200x200) – Jakub

+0

我知道我正在描述裁剪,但我需要先将图像调整到正确的宽度。然后,由此产生的图像,我需要砍掉任何多余的高度。裁剪全尺寸的图片对我来说不起作用。我需要找到一种方法来使用我上面的代码,并在调整大小阶段后合并裁剪,我已经在做。我似乎无法得到正确的代码。 –

0

这可以帮助你调整大小后裁剪:911-need-code-help

<?php 
    //---------------------------------------------------------------- 
    // Crop-to-fit PHP-GD 
    // Revision 2 [2009-06-01] 
    // Corrected aspect ratio of the output image 
    //---------------------------------------------------------------- 

    define('DESIRED_IMAGE_WIDTH', 150); 
    define('DESIRED_IMAGE_HEIGHT', 150); 

    $source_path = $_FILES[ 'Image1' ][ 'tmp_name' ]; 

    // 
    // Add file validation code here 
    // 

    list($source_width, $source_height, $source_type) = getimagesize($source_path); 

    switch ($source_type) 
    { 
    case IMAGETYPE_GIF: 
     $source_gdim = imagecreatefromgif($source_path); 
     break; 

    case IMAGETYPE_JPEG: 
     $source_gdim = imagecreatefromjpeg($source_path); 
     break; 

    case IMAGETYPE_PNG: 
     $source_gdim = imagecreatefrompng($source_path); 
     break; 
    } 

    $source_aspect_ratio = $source_width/$source_height; 
    $desired_aspect_ratio = DESIRED_IMAGE_WIDTH/DESIRED_IMAGE_HEIGHT; 

    if ($source_aspect_ratio > $desired_aspect_ratio) 
    { 
    // 
    // Triggered when source image is wider 
    // 
    $temp_height = DESIRED_IMAGE_HEIGHT; 
    $temp_width = (int) (DESIRED_IMAGE_HEIGHT * $source_aspect_ratio); 
    } 
    else 
    { 
    // 
    // Triggered otherwise (i.e. source image is similar or taller) 
    // 
    $temp_width = DESIRED_IMAGE_WIDTH; 
    $temp_height = (int) (DESIRED_IMAGE_WIDTH/$source_aspect_ratio); 
    } 

    // 
    // Resize the image into a temporary GD image 
    // 

    $temp_gdim = imagecreatetruecolor($temp_width, $temp_height); 
    imagecopyresampled(
    $temp_gdim, 
    $source_gdim, 
    0, 0, 
    0, 0, 
    $temp_width, $temp_height, 
    $source_width, $source_height 
); 

    // 
    // Copy cropped region from temporary image into the desired GD image 
    // 

    $x0 = ($temp_width - DESIRED_IMAGE_WIDTH)/2; 
    $y0 = ($temp_height - DESIRED_IMAGE_HEIGHT)/2; 

    $desired_gdim = imagecreatetruecolor(DESIRED_IMAGE_WIDTH, DESIRED_IMAGE_HEIGHT); 
    imagecopy(
    $desired_gdim, 
    $temp_gdim, 
    0, 0, 
    $x0, $y0, 
    DESIRED_IMAGE_WIDTH, DESIRED_IMAGE_HEIGHT 
); 

    // 
    // Render the image 
    // Alternatively, you can save the image in file-system or database 
    // 

    header('Content-type: image/jpeg'); 
    imagejpeg($desired_gdim); 

    // 
    // Add clean-up code here 
    // 
?>