繁体   English   中英

如何裁剪这个图片?

[英]How to crop this 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

请帮忙,谢谢

为什么不使用为你处理所有这些事情的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");

PHP的POST方法上传页面说:

$ _FILES [ 'userfile的'] [ '类型']

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

所以这里的图像类型数据是由上传文件的客户端提供的,PHP建议不要信任它。 相信getimagesize()会给你什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM