为什么jpegData无法保存我重新设置尺寸的图像?更新

时间:2019-05-28 00:09:03

标签: swift uiimage

我正在从相机或照片库中拍照,并将其保存在我的应用程序中。我不需要这么大的图像,因此我正在使用扩展程序来缩小图像。然后将其保存到应用程序空间。但是尺寸缩小无法保存。

我尝试过各种更改大小,删除和保存的排列方式。

        $filename = $_FILES['file']['name'];

        /* Location */
        $location = "../media/images/profile-pics/".$filename;
        $uploadOk = 1;
        $imageFileType = pathinfo($location,PATHINFO_EXTENSION);

        /* Valid Extensions */
        $valid_extensions = array("jpg","jpeg","png");
        /* Check file extension */
        if( !in_array(strtolower($imageFileType),$valid_extensions) ) {
           $uploadOk = 0;
        }

        if($uploadOk == 0){
           echo 0;
        }else{
           /* Upload file */
           if(move_uploaded_file($_FILES['file']['tmp_name'],$location)){


           }else{
              echo 0;
           }
        }

        //$filename = basename($_FILES['file']); removed, but still doesn't store file in db.


        $stmt = $db->prepare("UPDATE contacts SET name = ?, email = ?, phone = ?, jobtitle = ?, profile_pic = ? WHERE id = ?");
        $stmt->bind_param("sssssi", $name, $email, $phone, $jobtitle, $filename, $id);
        $stmt->execute();
        $stmt->close();

结果是...

A(4032.0,3024.0)

B(2048.0,1536.0)

C(2048.0,1536.0)

D(4096.0,3072.0)

当我检索“更新的”图像时,它具有原始大小。您看不到此图像,但图像已被替换。

很明显,我缺少一些基本知识-请让我摆脱痛苦。

对那些以前做出回应的好人表示歉意,但是我现在发现了一些额外的重要信息。样例大小欺骗了我们所有人。当我将缩小的尺寸更改为200(而不是原始尺寸的一半)时,我得到以下结果:

A(4032 3024)

B(200150)

C(200150)

D(400300)

所以发生的事情是使大小增加一倍,而不是-像我以前认为的那样-没有以新的大小进行更新。

这是否使它更清晰或更困惑?

谈到难题,我得到了-1,但没人说为什么。

2 个答案:

答案 0 :(得分:0)

UIImage(named:)缓存图像。您不是在第二次调用磁盘时从磁盘读取数据(我猜您之前曾用相同的路径调用过它)。要绕过缓存,您需要使用init(contentsOfFile:)

以下应按预期工作:

let path = getAppFolder() + photoUrl
print("A",hotspotImage.image!.size)
hotspotImage.image = hotspotImage.image!.resizeImage(2048, opaque: true)
print("B",hotspotImage.image!.size)
let fileManager  = FileManager.default
try! fileManager.removeItem(atPath: path)
try! hotspotImage.image!.jpegData(compressionQuality: 0.8)!.write(to: URL(fileURLWithPath: path), options: [.atomic])
print("C",hotspotImage.image!.size)
let  imageTest = UIImage(contentsOfFile: path)
print("D",imageTest!.size)

答案 1 :(得分:0)

如果它自动将所需大小加倍,则听起来好像正在应用屏幕缩放。我会检查正在使用的扩展名。如果缩放比例设置为0.0,则将应用当前屏幕缩放比例。

屏幕缩放非常适合显示在屏幕上的图像。 (这就是所谓的屏幕缩放的原因。)但是,如果要创建目标不是屏幕的图像,则应将缩放比例设置为1.0以保持所需的大小,并将其放大两倍或三倍。