如何裁剪这个图片?

时间:2012-01-10 07:55:56

标签: php image

我有这个图片,





我想将此图像裁剪为多种尺寸,因为我使用此功能 -

function thumbanail_for_image($Id, $newfilename, $size=NULL) {

    $file_extension = substr($newfilename, strrpos($newfilename, '.') + 1);
    $arr = explode('.', $newfilename);

    $thumb1 = LOCAL_FOLDER . $arr[0] . "_" . $Id . "." . $file_extension;
    $thumb2 = LOCAL_FOLDER . $arr[0] . "_" . $Id . "b" . "." . $file_extension;

    $old = LOCAL_FOLDER . $newfilename;

    $newfilename = LOCAL_FOLDER . $newfilename;

    $srcImage = "";

    $sizee = getimagesize($newfilename);

    switch ($sizee['mime']) {
    case "image/jpeg" :
        $srcImage = imagecreatefromjpeg($old);
        break;
    case "image/png":
        $srcImage = imagecreatefrompng($old);
        break;
    case "image/gif":
        $srcImage = imagecreatefromgif($old);
        break;
    }
    $srcwidth = $sizee[0];
    $srcheight = $sizee[1];

    if ($srcwidth > $srcheight || $srcwidth < $srcheight) {
    $destwidth1 = 65;
    $rat = $destwidth1 / $srcwidth;
    $destheight1 = (int) ($srcheight * $rat);
    }

    elseif ($srcwidth == $srcheight) {
    $destwidth1 = 65;
    $destheight1 = 65;
    }

    if ($srcwidth > $srcheight || $srcwidth < $srcheight) {
    $destwidth2 = 300;
    $rat = $destwidth2 / $srcwidth;
    $destheight2 = (int) ($srcheight * $rat);
    }
    elseif ($srcwidth == $srcheight) {
    $destwidth2 = 300;
    $destheight2 = 300;
    }

    $destImage1 = imagecreatetruecolor($destwidth1, $destheight1);
    $destImage2 = imagecreatetruecolor($destwidth2, $destheight2);

    imagecopyresampled($destImage1, $srcImage, 0, 0, 0, 0, $destwidth1, $destheight1, $srcwidth, $srcheight);
    imagecopyresampled($destImage2, $srcImage, 0, 0, 0, 0, $destwidth2, $destheight2, $srcwidth, $srcheight);

    if ($sizee['mime'] == "image/jpeg") {
    imagejpeg($destImage1, $thumb1, 80);
    imagejpeg($destImage2, $thumb2, 80);
    } elseif ($sizee['mime'] == "image/png") {
    imagepng($destImage1, $thumb1, 80);
    imagepng($destImage2, $thumb2, 80);
    } elseif ($sizee['mime'] == "image/gif") {
    imagegif($destImage1, $thumb1, 80);
    imagegif($destImage2, $thumb2, 80);
    }
    imagedestroy($destImage1);
    imagedestroy($destImage2);
    chmod($destImage1, 0777);
    chmod($destImage2, 0777);
    return $destImage1;
}

LOCAL_FOLDER是本地

的可变路径

我看到的问题是当我打印$ _FILES信息时显示

[type] =>image/jpeg

当我打印getimagesize()函数时,它会打印

[mime] => image/png

请帮忙, 感谢

2 个答案:

答案 0 :(得分:1)

为什么不使用为你处理所有这些事情的lib?

例如,请查看WideImage

include "path-to/WideImage.php";


$image = WideImage::load("path-to/image.jpg");
$cropped = $image->crop(0, 0, 100, 50);
$cropped->saveToFile("cropped-image.jpg");

答案 1 :(得分:1)

PHP的POST method uploads页面上写着:

  

<强> $ _ FILES [ 'userfile的'] [ '类型']

     

文件的mime类型,如果浏览器提供此信息。   一个例子是“image / gif”。但是,不检查这种哑剧类型   在PHP方面,因此不要将其值视为理所当然。

因此,此处的图像类型数据由上传文件的客户端提供,PHP建议不要信任它。相信getimagesize()给你的信息。