Изменить / Редактировать изображение PhAsset путем обрезки - PullRequest
0 голосов
/ 30 сентября 2019

есть ли способ изменить / отредактировать изображение phasset, обрезав или отредактировав его? У меня есть массив активов, я хочу обрезать изображение актива, получая изображение из выбранного актива и передавая ему контроллер обрезки, а взамен хочу изменить это обрезанное изображение в выбранном активе.

Есть мой код, который хорошо понимает

func presentCropViewController(with:IndexPath) {
    self.allPhotos[with.item].getImage { (img) in
        if let image = img{
              self.indexPathForCropping = with
            let cropViewController = CropViewController(image: image)
            cropViewController.delegate = self
            cropViewController.view.tintColor = UIColor.themeGreen()
            self.present(cropViewController, animated: true, completion: nil)

        }
    }


}

после передачи изображения из ресурса я получил обрезанное изображение этим методом

 func cropViewController(_ cropViewController: CropViewController, didCropToImage image: UIImage, withRect cropRect: CGRect, angle: Int) {
    cropViewController.dismiss(animated: true, completion: nil)
    // Here i get the cropped image and want to update selected asset with this image

}

Буду признателен, если вы упомянули причину голосования, поэтому я подготовлю свой вопрос соответственно

1 Ответ

0 голосов
/ 01 октября 2019

Я понял, что решение может быть неэффективным, но решил мою проблему.

extension PHAsset {

func updateChanges(with img:UIImage,completion:@escaping(PHAsset?)->()){

    PHPhotoLibrary.shared().performChanges({
        // create cropped image into phphotolibrary
        PHAssetChangeRequest.creationRequestForAsset(from: img)
    }) { (success, error) in
        if success{
            // fetch request to get last created asset
            let fetchOptions = PHFetchOptions()
            fetchOptions.sortDescriptors = [NSSortDescriptor(key:"creationDate", ascending: false)]
            fetchOptions.fetchLimit = 1
            let fetchResult: PHFetchResult = PHAsset.fetchAssets(with: PHAssetMediaType.image, options: fetchOptions)

            if let asset = fetchResult.firstObject{
                // replace your selected asset with new cropped one
                completion(asset)
            }else{
                completion(nil)
            }

        }else{
            completion(nil)
        }
    }

}

}

просто пропустите обрезанное / модифицированное изображение и получите новый ресурс с такой же обрезанной /измененное изображение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...