Php 如果我没有';我不知道它的尺寸?

Php 如果我没有';我不知道它的尺寸?,php,image,scale,image-resizing,Php,Image,Scale,Image Resizing,我有以下问题。用户可以上传图像,我想显示的图像大约小5倍,而不会造成图像失真。这是我想避免的。如何找到原始图像的宽度和高度并将其除以5 我使用php,忘了提到那个细节 你好,佐兰 用FILTER\u GAUSSIAN <?php $image = new Imagick( $filename ); $imageprops = $image->getImageGeometry(); if ($imageprops['width'] <= 200 &

我有以下问题。用户可以上传图像,我想显示的图像大约小5倍,而不会造成图像失真。这是我想避免的。如何找到原始图像的宽度和高度并将其除以5

我使用php,忘了提到那个细节

你好,佐兰

FILTER\u GAUSSIAN

<?php
    $image = new Imagick( $filename );
    $imageprops = $image->getImageGeometry();
    if ($imageprops['width'] <= 200 && $imageprops['height'] <= 200) {
        // don't upscale
    } else {
        $image->resizeImage(200,200, imagick::FILTER_GAUSSIAN, 0.9, true);
    }
?>

图像上传完成后,使用以下功能:

<?php

function generate_image_thumbnail($source_image_path, $thumbnail_image_path){
    list($source_image_width, $source_image_height, $source_image_type) = getimagesize($source_image_path);
    switch ($source_image_type) {
        case IMAGETYPE_GIF:
            $source_gd_image = imagecreatefromgif($source_image_path);
            break;
        case IMAGETYPE_JPEG:
            $source_gd_image = imagecreatefromjpeg($source_image_path);
            break;
        case IMAGETYPE_PNG:
            $source_gd_image = imagecreatefrompng($source_image_path);
            break;
    }

    if ($source_gd_image === false) {
        return false;
    }

    $thumbnail_image_width = $source_image_width/5;
    $thumbnail_image_height = $source_image_height/5;

    $thumbnail_gd_image = imagecreatetruecolor($thumbnail_image_width, $thumbnail_image_height);
    imagecopyresampled($thumbnail_gd_image, $source_gd_image, 0, 0, 0, 0, $thumbnail_image_width, $thumbnail_image_height, $source_image_width, $source_image_height);
    imagejpeg($thumbnail_gd_image, $thumbnail_image_path, 90);
    imagedestroy($source_gd_image);
    imagedestroy($thumbnail_gd_image);
    return true;
}
?>

将right参数传递给函数,它将完成此任务


并确保在php设置中启用了GD。它使用gd库。

从您的评论中,您正在寻找比您得到的答案更简单的东西。您是否尝试过
getimagesize

您可以这样做:

$size = getimagesize($filename);
echo $size[0]/5; //width
echo $size[1]/5; //height

这种方法还有一个优点,就是不必依赖像GD之类的图像库

嗨。抱歉,忘了提一下,我用的是phpYou,它总是会通过缩小尺寸来扭曲图像,因为在这个过程中会丢失信息。你唯一能做的就是在缩小尺度之前或缩小尺度过程中通过低通滤波来避免图像走样。这很好,但是没有简单的方法来找到现有的图像大小并将其除以5吗?不,因为它会造成失真,所以在进行二次采样之前必须模糊你是认真的吗?如果你想要更好的质量,只需使用重采样而不是调整大小。使用像Lanczos这样的重采样过滤器,为什么要先模糊图像并删除信息?我只是想找到现有图像的大小,然后再将其显示得更小,而不必实际调整图像的大小。是否有任何函数可以找到图像大小并将其除以5,例如:list($source\u image\u width,$source\u image\u height,$source\u image\u type)=getimagesize($source\u image\u path);此行查找图像的高度和宽度,并将其保存在$source\u image\u height和$source\u image\u width中,以及$thumbnail\u image\u width=$source\u image\u width/5下面的行中$缩略图图像高度=$source图像高度/5;我已经设置了新的缩略图高度和宽度,它比正确的原始图像小5倍。我现在得到0,试图找出发生了什么。稍后将在此处添加注释。感谢您解决此问题,我的图像位于数组中,这就是我在第一次尝试中获得0的原因。现在它就像一个符咒。非常感谢。