我正在从相机或照片库中拍照,并将其保存在我的应用程序中。我不需要这么大的图像,因此我正在使用扩展程序来缩小图像。然后将其保存到应用程序空间。但是尺寸缩小无法保存。
我尝试过各种更改大小,删除和保存的排列方式。
$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,但没人说为什么。
答案 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以保持所需的大小,并不将其放大两倍或三倍。