diff --git a/Memola/Canvas/Contexts/GraphicContext.swift b/Memola/Canvas/Contexts/GraphicContext.swift index b1f8254..8abe1c1 100644 --- a/Memola/Canvas/Contexts/GraphicContext.swift +++ b/Memola/Canvas/Contexts/GraphicContext.swift @@ -319,7 +319,7 @@ extension GraphicContext { // MARK: - Photo extension GraphicContext { func insertPhoto(at point: CGPoint, photoItem: PhotoItem) -> Photo { - let size = photoItem.dimension + let size = photoItem.getDimension() let origin = point let bounds = [origin.x - size.width / 2, origin.y - size.height / 2, origin.x + size.width / 2, origin.y + size.height / 2] let photo = Photo(url: photoItem.id, size: size, origin: origin, bounds: bounds, createdAt: .now, bookmark: photoItem.bookmark) diff --git a/Memola/Canvas/Elements/Photo/Photo.swift b/Memola/Canvas/Elements/Photo/Photo.swift index 45c720e..cf2fdaa 100644 --- a/Memola/Canvas/Elements/Photo/Photo.swift +++ b/Memola/Canvas/Elements/Photo/Photo.swift @@ -77,7 +77,6 @@ extension Photo: Drawable { renderEncoder.setFragmentTexture(texture, index: 0) renderEncoder.setVertexBuffer(vertexBuffer, offset: 0, index: 0) renderEncoder.drawPrimitives(type: .triangle, vertexStart: 0, vertexCount: vertices.count) - vertexBuffer = nil } } diff --git a/Memola/Canvas/Tool/Core/Tool.swift b/Memola/Canvas/Tool/Core/Tool.swift index a60c984..4c837c2 100644 --- a/Memola/Canvas/Tool/Core/Tool.swift +++ b/Memola/Canvas/Tool/Core/Tool.swift @@ -114,33 +114,35 @@ public class Tool: NSObject, ObservableObject { } func selectPhoto(_ image: UIImage, for canvasID: NSManagedObjectID) { - guard let resizedImage = resizePhoto(of: image) else { return } - let photoItem = bookmarkPhoto(of: resizedImage, with: canvasID) + guard let (resizedImage, dimension) = resizePhoto(of: image) else { return } + let photoItem = bookmarkPhoto(of: resizedImage, in: dimension, with: canvasID) withAnimation { selectedPhotoItem = photoItem } } - private func resizePhoto(of image: UIImage) -> UIImage? { - let targetSize = CGSize(width: 768, height: 768) + private func resizePhoto(of image: UIImage) -> (UIImage, CGSize)? { + let targetSize = CGSize(width: 512, height: 512) let size = image.size let widthRatio = targetSize.width / size.width let heightRatio = targetSize.height / size.height - let newSize = CGSize( + let dimension = CGSize( width: size.width * min(widthRatio, heightRatio), height: size.height * min(widthRatio, heightRatio) ) - let rect = CGRect(origin: .zero, size: newSize) + let rect = CGRect(origin: .zero, size: targetSize) - UIGraphicsBeginImageContextWithOptions(newSize, true, 1.0) + UIGraphicsBeginImageContextWithOptions(targetSize, true, 1.0) image.draw(in: rect) let newImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() - return newImage + guard let newImage else { return nil } + + return (newImage, dimension) } - private func bookmarkPhoto(of image: UIImage, with canvasID: NSManagedObjectID) -> PhotoItem? { + private func bookmarkPhoto(of image: UIImage, in dimension: CGSize, with canvasID: NSManagedObjectID) -> PhotoItem? { guard let data = image.jpegData(compressionQuality: 1) else { return nil } let fileManager = FileManager.default guard let directory = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first else { @@ -167,7 +169,7 @@ public class Tool: NSObject, ObservableObject { var photoBookmark: PhotoItem? do { let bookmark = try file.bookmarkData(options: .minimalBookmark) - photoBookmark = PhotoItem(id: file, image: image, bookmark: bookmark) + photoBookmark = PhotoItem(id: file, image: image, dimension: dimension, bookmark: bookmark) } catch { NSLog("[Memola] - \(error.localizedDescription)") } diff --git a/Memola/Features/Memo/PhotoPreview/PhotoItem.swift b/Memola/Features/Memo/PhotoPreview/PhotoItem.swift index fbc6875..d38272e 100644 --- a/Memola/Features/Memo/PhotoPreview/PhotoItem.swift +++ b/Memola/Features/Memo/PhotoPreview/PhotoItem.swift @@ -11,13 +11,13 @@ import Foundation struct PhotoItem: Identifiable, Equatable { var id: URL let image: UIImage + let dimension: CGSize let bookmark: Data - var dimension: CGSize { - let size = image.size - let maxSize = max(size.width, size.height) - let width = size.width * 128 / maxSize - let height = size.height * 128 / maxSize + func getDimension() -> CGSize { + let maxSize = max(dimension.width, dimension.height) + let width = dimension.width * 100 / maxSize + let height = dimension.height * 100 / maxSize return CGSize(width: width, height: height) } }