使用 php 裁剪图像

Posted

技术标签:

【中文标题】使用 php 裁剪图像【英文标题】:Crop image using php 【发布时间】:2009-09-03 10:00:05 【问题描述】:

我想裁剪图像。有没有可能这样做。如果是,crop() 函数会是什么样子?

$imgURL 始终是 .jpg 图像。

$image = file_get_contents($imgURL);
$maxWidth = 100;
$height = 68;

$image = crop($image, $maxWidth, $height);

file_put_contents("media/imgname.jpg", $image);

function crop($image, $maxWidth, $height)
    ...how do I crop the image?

【问题讨论】:

【参考方案1】:

如果您安装了 GD 库,请查看 the functions available to you。如果您需要更多解释和示例,请查看this blog。

此外,还有很多 SO posts 可以帮助您。

【讨论】:

【参考方案2】:

看看gd library,它通常是大多数 php 安装的一部分。

通常,您会:

    使用 imagecreatefromTYPE 函数之一导入图像 使用 imagecreate($width,$height) 制作空白缓冲区图片 使用 imagecopy() 将您想要的部分传输到缓冲区 使用 imageTYPE 函数之一将缓冲区写入文件。

【讨论】:

【参考方案3】:

您可以使用 timthumb 进行裁剪,使用 timtgumb 您可以实时调整图像大小....

查看http://www.wprecipes.com/how-to-resize-images-on-the-fly

这是结果http://joedesigns.com/resizing2/example.php

【讨论】:

【参考方案4】:

如果您的服务器上没有安装 GD,您可以使用的另一个选项是 Image Magick。

【讨论】:

【参考方案5】:

使用 GD 库查找以下图像裁剪代码:

<?php
function createThumb($upfile, $dstfile, $max_width, $max_height)

   $size = getimagesize($upfile);

   $width = $size[0];

   $height = $size[1];



   $x_ratio = $max_width / $width;

   $y_ratio = $max_height / $height;

   if( ($width <= $max_width) && ($height <= $max_height)) 

           $tn_width = $width;

           $tn_height = $height;

    elseif (($x_ratio * $height) < $max_height) 

           $tn_height = ceil($x_ratio * $height);

           $tn_width = $max_width;

    else 

           $tn_width = ceil($y_ratio * $width);

           $tn_height = $max_height;

   



   if($size['mime'] == "image/jpeg")

           $src = ImageCreateFromJpeg($upfile);

           $dst = ImageCreateTrueColor($tn_width, $tn_height);

           imagecopyresampled($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height,$width, $height);

           imageinterlace( $dst, true);

           ImageJpeg($dst, $dstfile, 100);

    else if ($size['mime'] == "image/png")

           $src = ImageCreateFrompng($upfile);

           $dst = ImageCreateTrueColor($tn_width, $tn_height);

           imagecopyresampled($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height,$width, $height);

           Imagepng($dst, $dstfile);

    else 

           $src = ImageCreateFromGif($upfile);

           $dst = ImageCreateTrueColor($tn_width, $tn_height);

           imagecopyresampled($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height,$width, $height);

           imagegif($dst, $dstfile);

   



//usage

if(isset($_FILES['upload_Image']['name']) && $_FILES['upload_Image']['name']!=='') 
    $ext = substr($_FILES['upload_Image']['name'], strpos($_FILES['upload_Image']['name'],'.'), strlen($_FILES['upload_Image']['name'])-1); 

    $imgNormal = time().$ext;

    $normalDestination = "Photos/Orignal/" . $imgNormal;

    $httpRootLarge = "Photos/Large/" . $imgNormal;

    $httpRootSmall = "Photos/Small/" . $imgNormal;

    $httpRootThumb = "Photos/Thumb/" . $imgNormal;

    move_uploaded_file($_FILES['upload_Image']['tmp_name'], $normalDestination);



    createThumb($normalDestination,$httpRootLarge,680,604); #For 604x604 Image  

    createThumb($normalDestination,$httpRootSmall,500,300); #For 500x300 Image  

    createThumb($normalDestination,$httpRootThumb,130,100); #For 130x100 Image



?>

【讨论】:

【参考方案6】:

试试用 Jquery 做 JCROP 插件

裁剪图像的最佳插件之一

deepliquid.com----download JCROP

 function cropfun()         
            $('#previews').Jcrop( 
                aspectRatio: 3,
                minSize:[300,100] ,
                boxWidth: 450, boxHeight: 400,
                bgFade:true,
                bgOpacity: .5,
                setSelect: [ 60, 70, 600, 330 ],
                onSelect: updateCoords
            );



 function updateCoords(c)
        
            $('#x').val(c.x);
            $('#y').val(c.y);
            $('#w').val(c.w);
            $('#h').val(c.h);
        ;

        function checkCoords()
        

            if (parseInt($('#w').val())) return true;
            alert('Select where you want to Crop.');
            return false;
        ;

在身体部位

     <img  src="uploads/<?php  echo $image; ?>" id="previews" name="previews"  onclick="cropfun();"   />
     <input type="file" name="image22" id="image22" style="visibility:hidd"     >
    <input type="hidden" id="hh" name="hh" value="" />
     <input type="hidden" id="hhh" name="hhh" value="<?php  echo $image; ?>" />
        <input type="hidden" id="x" name="x" />
        <input type="hidden" id="y" name="y" />
        <input type="hidden" id="w" name="w" />
        <input type="hidden" id="h" name="h" />
        <input type="submit" name="submit" id="sub" value="submit" />
    </form>

【讨论】:

他要求的是 php 而不是 javascript,尤其是 jQuery 解决方案。

以上是关于使用 php 裁剪图像的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 或 Javascript 裁剪图像 [关闭]

使用 jWindowCrop 裁剪图像 - PHP

使用 php 裁剪图像

在 PHP imagecopyresampled 中裁剪图像 - 挤压而不是裁剪

使用 PHP 裁剪图像

PHP图像调整大小和裁剪功能