上传脚本,裁剪/砍掉缩略图

时间:2013-07-08 14:18:21

标签: php image crop chop

我正在尝试创建一个图片上传系统但遇到了一个问题。系统上传插入的图像并创建缩略图。

允许用户给出缩略图的宽度和高度。当图像是200px×100px时,用户说缩略图宽度为10px,高度为20px,系统必须拉伸我不想发生的图像。我希望系统使用Imagick功能切割图像的一部分,以便在图像通过脚本时获得正常的缩略图和图像。

该功能使用如下:

chopImage ( width of the chopped area , height of the chopped area , x coordinate of topleft corner of chopped area , y coordinate of topleft corner of chopped area )

php上传系统的标准配置:

$image = $_FILES["image"]["name"];
            $imgtemp = $_FILES["image"]["tmp_name"];
            $imgtype = $_FILES["image"]["type"];
            $imgsize = $_FILES["image"]["size"];    

if(!$image){
        if($image_enabled ==2){
            $errors[] = "You didn't selected an image to upload";
            }
        } else {
    if( $imgtype == 'image/jpeg' ){ $filetype= '.jpg'; }else{ $filetype= str_replace ( 'image/', '', $imgtype ); }

    $path= 'images/' . md5( rand( 0, 1000 ) . rand( 0, 1000 ) . rand( 0, 1000 ) . rand( 0, 1000 ) ) . '.jpg';
    $thumb_path= 'images/thumb_' . md5( rand( 0, 1000 ) . rand( 0, 1000 ) . rand( 0, 1000 ) . rand( 0, 1000 ) ) . '.jpg';
    $imgsize2= getimagesize( $imgtemp );
    $width= $imgsize2[0];
    $height= $imgsize2[1];

    $maxwidth= 1281;
    $maxheight= 721;
    $allowed= array( 'image/png', 'image/jpeg', 'image/gif', );

    if( in_array( $imgtype, $allowed ) ){

        if( $width < $maxwidth && $height < $maxheight ){

        if( $imgsize < 5242880 ){

我被困的部分:

                    if(!isEmpty($image_thumbheight) || !isEmpty($image_thumbwidth)){

                        switch( $imgtype ){
                            case 'image/gif';
                            $img= imagecreatefromgif( $imgtemp );
                            $img_thumb= imagecreatefromgif( $thumb );
                        header("Content-type: image/gif");
        $image_crop = new Imagick("$image"); 
        $image_crop->cropImage( $image_thumbwidth,$image_thumbheight, 0,$height );
        $image_crop->writeImage($thumb);
        imagegif( $thumb, $thumb_path );
        break;

                        case 'image/png';
                            $img= imagecreatefrompng( $imgtemp );

                        header("Content-type: image/png");
        $image_crop = new Imagick("$imgtemp"); 
        $image_crop->chopImage( $image_thumbwidth,$image_thumbheight, 0,$height );
        $image_crop->writeImage($thumb);
        imagepng( $thumb, $thumb_path );
        break;
        case 'image/jpeg';
                            $img= imagecreatefromjpeg( $imgtemp );
                            $img_thumb= imagecreatefromjpeg( $thumb );
                        header("Content-type: image/jpeg");
        $image_crop = new Imagick("$image"); 
        $image_crop->chopImage( $image_thumbwidth,$image_thumbheight, 0,$height );
        $image_crop->writeImage($thumb_path);
        imagejpeg( $thumb, $thumb_path );
        break;
                        }

                move_uploaded_file( $imgtemp, $path );
                echo "Image is successfully uploaded.";
                        }

当我运行此脚本时,它只上传普通图像。缩略图未上传。 我认为,常常不会使用imagick函数,因为使用imagick函数无法在互联网上找到任何上传教程。 有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

你的代码看起来有点混乱......这有效吗?

if(!isEmpty($image_thumbheight) || !isEmpty($image_thumbwidth)){
    $image_crop = new Imagick( $imgtmp );
    $image_crop->cropImage( $image_thumbwidth, $image_thumbheight, 0, $height );
    $image_crop->writeImage( $thumb_path );

    move_uploaded_file( $imgtemp, $path );
    echo "Image is successfully uploaded.";
}