Добавление тени над изображением в Swift - PullRequest
0 голосов
/ 24 мая 2019

Этот проект взят из SwiftOCR garnele007.В проекте Swift есть NSImage (который также преобразуется в .png для сохранения), к которому я хотел бы добавить тень.Существует несколько примеров добавления тени внутри viewcontroller и т. Д., Но до сих пор пример того, как использовать что-то вроде Core Graphics / Image для добавления тени, ускользнул от меня.Мое воображение дает мне что-то вроде

randomImg.CGAddShadow (shadow: true, weight: medium)

В нескольких инструкциях, использующихся вокруг, используется UIKit, который не будет работать в этом проекте MacOS.Другие добавляют временный слой для удобства пользователя, но не сохраняют файл с примененной тенью.

Код в настоящее время выглядит следующим образом:


            let customImage: (String) -> OCRImage = { code in
                let randomImg = randomImage()
                randomImg.lockFocus()

                randomImg.draw(in: CGRect(origin: CGPoint.zero, size: randomImg.size))


                NSString(string: code).draw(in: CGRect(origin: CGPoint(x: 0, y: -15.5 ), size: randomImg.size), withAttributes: randomFontAttributes())

                randomImg.unlockFocus()


                let data = NSBitmapImageRep(data: randomImg.tiffRepresentation!)?.representation(using: .png, properties: [:])

                 return randomImg
            }

Конечный результатнадеюсь, измененный файл с тенью над ним, который можно сохранить и просмотреть позже.

Спасибо за любые предложения

1 Ответ

0 голосов
/ 28 мая 2019

Решение, которое я выбрал (случайный фильтр сепии):


            let context = CIContext()

            // Load originalCIImage with contents of the URL
            var imageURL = Bundle.main.urlForImageResource(NSImage.Name(rawValue: "image.png"))
            var originalCIImage = CIImage(contentsOf: imageURL!)

            // Declare func for filter
            func sepiaFilter(_ input: CIImage, intensity: Double) -> CIImage?
            {
                let sepiaFilter = CIFilter(name:"CISepiaTone")
                sepiaFilter?.setValue(input, forKey: kCIInputImageKey)
                sepiaFilter?.setValue(intensity, forKey: kCIInputIntensityKey)
                return sepiaFilter?.outputImage
            }

            // call the filter func on the image
            let sepiaCIImage = sepiaFilter(originalCIImage!, intensity:0.9)

            // change the image from CIImage type to NSImage type
            let rep = NSCIImageRep(ciImage: sepiaCIImage!)
            let filteredImage = NSImage(size: rep.size)
            filteredImage.addRepresentation(rep)

            // change from NSImage type to .png format
            let filterData = NSBitmapImageRep(data: filteredImage.tiffRepresentation!)?.representation(using: .png, properties: [:])

            // save the png file to the desktop
            do {
                try filterData?.write(to: (FileManager.default.urls(for: .desktopDirectory, in: .userDomainMask).first?.appendingPathComponent("FILTEREDIMAGE.png"))!)
            }
            catch _ {
                print("Adding filter to picture error")
            }

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