title: Image doesn't transfer filter (swift)
body: <p>I am using Xcode to build an Instagram app.</p>
  
  <p>In my project, I applied a filter to an image, but when I send it to the database and retrieve it in another view, the filter is not showing up.</p>
  
  <p><a href="https://i.stack.imgur.com/lCKmF.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/lCKmF.png" alt="enter image description here"></a></p>
  
  <p>This is after applying the filter, and it shows up without the filter in home view:</p>
  
  <p><a href="https://i.stack.imgur.com/FXdnd.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/FXdnd.png" alt="enter image description here"></a></p>
  
  <p><strong>Filter View Code :</strong></p>
  
  <pre><code>//
  //  FillterVC.swift
  //  InstaPJT1
  //
  //  Created by MacBook Pro on 06/11/2019.
  //  Copyright © 2019 MacBook Pro. All rights reserved.
  //
  
  import UIKit
  
  protocol FillterVCDelegate {
      func transformPhotoToCamera (image : UIImage)
  }
  
  class FillterVC: UIViewController {
  
      @IBOutlet weak var imagePostOUtLet: UIImageView!
  
      @IBOutlet weak var collectionViewOUtLet: UICollectionView!
  
      var delegate : FillterVCDelegate?
  
      var selectedImage : UIImage!
      var filters = [
          "CIPhotoEffectChrome",
          "CIPhotoEffectFade",
          "CIPhotoEffectInstant",
          "CIPhotoEffectNoir",
          "CIPhotoEffectProcess",
          "CIPhotoEffectTonal",
          "CIPhotoEffectTransfer",
          "CISepiaTone"
          ]
  
      override func viewDidLoad() {
          super.viewDidLoad()
          self.imagePostOUtLet.image = selectedImage
          // Do any additional setup after loading the view.
      }
  
      @IBAction func cancelButton(_ sender: Any) {
          dismiss(animated: true, completion: nil)
      }
  
      @IBAction func nextButton(_ sender: Any) {
          dismiss(animated: true, completion: nil)
          delegate?.transformPhotoToCamera(image: imagePostOUtLet.image!)
      }
  
      func resizeImageScale (image : UIImage , newWidth : CGFloat)-&gt; UIImage {
          let scale = newWidth / image.size.width
          let newHeigh = image.size.height * scale
          UIGraphicsBeginImageContext(CGSize(width: newWidth , height: newHeigh))
          image.draw(in: CGRect(x: 0, y: 0, width: newWidth, height: newHeigh))
          let newImage = UIGraphicsGetImageFromCurrentImageContext()
          UIGraphicsEndImageContext()
          return newImage!
      }
  
  }
  
  extension FillterVC : UICollectionViewDelegate , UICollectionViewDataSource {
      func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -&gt; Int {
          return filters.count
      }
  
      func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -&gt; UICollectionViewCell {
          let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "FillterCell", for: indexPath) as! FillterCell
          let newImage = resizeImageScale(image: selectedImage, newWidth: 200)
          print(selectedImage.size)
          print(newImage.size)
          let ciImage = CIImage(image: newImage)
  
          let filter = CIFilter(name: filters[indexPath.item])
          filter?.setValue(ciImage, forKey: kCIInputImageKey)
          if let filterdImage = filter?.value(forKey: kCIOutputImageKey) as! CIImage? {
               cell.filteredImageOutLet.image = UIImage(ciImage: filterdImage)
          }
  
          return cell
      }
  
      func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
           let ciImage = CIImage(image: selectedImage)
  
                 let filter = CIFilter(name: filters[indexPath.item])
                 filter?.setValue(ciImage, forKey: kCIInputImageKey)
                 if let filterdImage = filter?.value(forKey: kCIOutputImageKey) as! CIImage? {
                      imagePostOUtLet.image = UIImage(ciImage: filterdImage)
                 }
  
      }
  
  }
  </code></pre>
  
  <p><strong>Camera View:</strong></p>
  
  <pre><code>//
  //  CameraVC.swift
  //  InstaPJT1
  //
  //  Created by MacBook Pro on 22/01/2019.
  //  Copyright © 2019 MacBook Pro. All rights reserved.
  //
  
  import UIKit
  import SVProgressHUD
  import AVFoundation
  
  class CameraVC: UIViewController {
  
      @IBOutlet weak var reomveButtonLabel: UIBarButtonItem!
  
      @IBOutlet weak var photo: UIImageView!
  
      @IBOutlet weak var captionTextVIew: UITextView!
  
      @IBOutlet weak var shareButton: UIButton!
  
      var selectedPhotoToDataBase : UIImage?
      var selectedVidoeToDataBase : URL?
      override func viewDidLoad() {
          super.viewDidLoad()
  
          let tapGuster = UITapGestureRecognizer(target: self, action: #selector(CameraVC.handelPhtotSelected))
          photo.addGestureRecognizer(tapGuster)
          photo.isUserInteractionEnabled = true
      }
  
      override func viewDidAppear(_ animated: Bool) {
          super.viewDidAppear(animated)
          handelPostsEmpty()
      }
  
      @objc func handelPostsEmpty () {
  //        if selectedPhotoToDataBase != nil {
  //            shareButton.isEnabled = true
  //            reomveButtonLabel.isEnabled = true
  //            shareButton.backgroundColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
  //        } else {
  //            shareButton.isEnabled = false
  //            reomveButtonLabel.isEnabled = false
  //            shareButton.backgroundColor = .lightGray
  //            
  //
  //        }
      }
  
      @objc func handelPhtotSelected () {
          print("user try to tap on photo")
          let photoPicker = UIImagePickerController()
          photoPicker.delegate = self
          photoPicker.mediaTypes = ["public.image","public.movie"]
          present(photoPicker, animated: true, completion: nil)
      }
  
      override func touchesBegan(_ touches: Set&lt;UITouch&gt;, with event: UIEvent?) {
          view.endEditing(true)
      }
      func textFieldShouldReturn(_ textField: UITextField) -&gt; Bool {
          textField.resignFirstResponder()
          return true
      }
  
      @IBAction func share_onTouch(_ sender: Any) {
         // view.endEditing(true)
          print("ndndndndnd")
          if let profileIMG = self.selectedPhotoToDataBase , let imageData = profileIMG.jpegData(compressionQuality: 0.1) {
              let ratio = profileIMG.size.width / profileIMG.size.height
              print("image size = \(ratio)")
              HelperService.UploadDataToStorage(vidoeURL : selectedVidoeToDataBase , imageData: imageData, ratio : ratio , captionTextVIew: captionTextVIew.text
                  , OnSuccess: {
                      SVProgressHUD.showSuccess(withStatus: "تم النشر بنجاح")
                      self.Clean()
  
              }) { (error) in
                  SVProgressHUD.showError(withStatus: error)
              }
          }
      }
  
      @objc func Clean () {
          self.captionTextVIew.text = ""
          self.photo.image = UIImage(named: "placeholder-photo")
          self.tabBarController?.selectedIndex = 0 // بعد ما ينحفظ البوست راح ترجع بنا الصفحة الى الصفحة الرئيسية
          self.selectedPhotoToDataBase = nil
      }
  
      @IBAction func removeButton(_ sender: Any) {
          self.captionTextVIew.text = ""
          self.photo.image = UIImage(named: "placeholder-photo")
          self.selectedPhotoToDataBase = nil
          SVProgressHUD.showSuccess(withStatus: "Removed")
          handelPostsEmpty()
      }
  
      override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
          if segue.identifier == "Fillter_Segue" {
              let fitlervc = segue.destination as! FillterVC
              fitlervc.selectedImage = selectedPhotoToDataBase
              fitlervc.delegate = self
          }
      }
  }
  
  extension CameraVC : UIImagePickerControllerDelegate , UINavigationControllerDelegate {
  
      func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
  // Local variable inserted by Swift 4.2 migrator.
  let info = convertFromUIImagePickerControllerInfoKeyDictionary(info)
  
          print(info)
          if let vidoeURL = info["UIImagePickerControllerMediaURL"] as? URL {
              if let thumbnailForVidoe = self.thubmnailImageForFileURL(vidoeURL) {
                  photo.image = thumbnailForVidoe
                  selectedPhotoToDataBase = thumbnailForVidoe
  
                  selectedVidoeToDataBase = vidoeURL
  
              }
              dismiss(animated: true, completion: nil)
  
          }
  
          if let photoSelectedFromLibriry = info[convertFromUIImagePickerControllerInfoKey(UIImagePickerController.InfoKey.originalImage)] as? UIImage {
              photo.image = photoSelectedFromLibriry
              selectedPhotoToDataBase = photoSelectedFromLibriry
              self.dismiss(animated: true) {
                  self.performSegue(withIdentifier: "Fillter_Segue", sender: nil)
              }
          }
      }
  
      func thubmnailImageForFileURL (_ file : URL) -&gt; UIImage? {
          let asset = AVAsset(url: file)
          let imageGenenartor = AVAssetImageGenerator(asset: asset)
  
          do {
             let thumbImage = try   imageGenenartor.copyCGImage(at: CMTimeMake(value: 7, timescale: 4), actualTime: nil)
              return UIImage(cgImage: thumbImage)
  
          } catch let error {
              print(error)
          }
  
          return UIImage()
      }
  
  }
  
  // Helper function inserted by Swift 4.2 migrator.
  fileprivate func convertFromUIImagePickerControllerInfoKeyDictionary(_ input: [UIImagePickerController.InfoKey: Any]) -&gt; [String: Any] {
      return Dictionary(uniqueKeysWithValues: input.map {key, value in (key.rawValue, value)})
  }
  
  // Helper function inserted by Swift 4.2 migrator.
  fileprivate func convertFromUIImagePickerControllerInfoKey(_ input: UIImagePickerController.InfoKey) -&gt; String {
      return input.rawValue
  }
  
  extension CameraVC : FillterVCDelegate {
      func transformPhotoToCamera(image: UIImage) {
          self.photo.image = image
      }
  }
  </code></pre>
  
  <p><strong>Home View :</strong></p>
  
  <pre><code>//
  //  HomeVC.swift
  //  InstaPJT1
  //
  //  Created by MacBook Pro on 22/01/2019.
  //  Copyright © 2019 MacBook Pro. All rights reserved.
  //
  
  import UIKit
  import SVProgressHUD
  import SDWebImage
  
  class HomeVC: UIViewController  {
  
      @IBOutlet weak var tableViewOutLet: UITableView!
  
      @IBOutlet weak var activityIndicatorView: UIActivityIndicatorView!
      var postContentArray = [Post]() // contine all Posts .
      var userContentArray = [UserModel]()
  
      override func viewDidLoad() {
          super.viewDidLoad()
          tableViewOutLet.dataSource = self
          tableViewOutLet.delegate = self
          tableViewOutLet.estimatedRowHeight = 521
          tableViewOutLet.rowHeight = UITableView.automaticDimension
          loadPosts()
      }
  
      override func viewWillAppear(_ animated: Bool) {
          super.viewWillAppear(animated)
          self.tabBarController?.tabBar.isHidden = false
      }
  
  
      @objc func loadPosts () {
        //  activityIndicatorView.startAnimating()
          API.Feed.ObserveFeedWithMyPostAndFollowerPost(withid: API.User.Curren_User!.uid) { (postr) in
  
              self.fetchUserInfo(PostUserID: postr.userPostId!, Completed: {
              self.postContentArray.append(postr)
            //  self.activityIndicatorView.stopAnimating()
  
              self.tableViewOutLet.reloadData()
  
                              })
          }
  
          API.Feed.ObserveFeedReomved(withid: API.User.Curren_User!.uid) { (post) in
              // print(key)
  
              // a لحذف منشورات المستخدم من التيبل فيو
         //   self.postContentArray.removeLast()
              self.postContentArray = self.postContentArray.filter {$0.postID !=  post.postID}
              self.userContentArray = self.userContentArray.filter {$0.id != post.userPostId}
              self.tableViewOutLet.reloadData()
          }
      }
  
      @objc func fetchUserInfo (PostUserID : String , Completed : @escaping ()-&gt; Void) {
  
          API.User.observeUserInformation(CommentUserID: PostUserID) { (User) in
              self.userContentArray.append(User)
              Completed()
          }
      }
  
      @IBAction func logOutButton(_ sender: Any) {
  
          AuthServices.logout(OnSuccess: {
          SVProgressHUD.showSuccess(withStatus: "تم تسجيل الخروج")
              let storyBoard = UIStoryboard(name: "Start", bundle: nil)
              let signInvc = storyBoard.instantiateViewController(withIdentifier: "SignInVC")
              self.present(signInvc, animated: true, completion: nil)
          }) { (error) in
              SVProgressHUD.showError(withStatus: error)
          }
      }
  
      override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
          if segue.identifier == "commentIconSequeToCommentPage" {
              let commentvc = segue.destination as! CommentsVC
              commentvc.postID = sender as? String
          }
          if segue.identifier == "Home_ToUserProfileTappedVC" {
              let userid = segue.destination as! UserProfileTappedVC
              userid.userID = sender as! String
  
          }
      }
  }
  
  extension HomeVC: UITableViewDataSource , UITableViewDelegate {
  
      func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -&gt; Int {
          return postContentArray.count
      }
  
      func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -&gt; UITableViewCell {
          let cell = tableView.dequeueReusableCell(withIdentifier: "PostCell", for: indexPath) as! HomeTableViewCell
          let postContent = postContentArray[indexPath.row]
          let userContent = userContentArray[indexPath.row]
          cell.postContent = postContent
          cell.userContentInfo = userContent
          // l لتفعيل زر الردود و مساواته بالمتغير هوم فيو الموجود في ملف هوم تيبل فيو سيل
          cell.homeView = self
          cell.delegate = self
          return cell
      }
  }
  
  extension HomeVC : HomeTableViewCellDelegate {
      func GoToUserProfileTappedVC(id: String) {
          performSegue(withIdentifier: "Home_ToUserProfileTappedVC", sender: id)
      }
  
      func GoToCommentVC(postID: String) {
          performSegue(withIdentifier: "commentIconSequeToCommentPage", sender: postID)
      }
  }
  </code></pre>