Image+FileKit.swift 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. //
  2. // Image.swift
  3. // FileKit
  4. //
  5. // The MIT License (MIT)
  6. //
  7. // Copyright (c) 2015-2017 Nikolai Vazquez
  8. //
  9. // Permission is hereby granted, free of charge, to any person obtaining a copy
  10. // of this software and associated documentation files (the "Software"), to deal
  11. // in the Software without restriction, including without limitation the rights
  12. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  13. // copies of the Software, and to permit persons to whom the Software is
  14. // furnished to do so, subject to the following conditions:
  15. //
  16. // The above copyright notice and this permission notice shall be included in
  17. // all copies or substantial portions of the Software.
  18. //
  19. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  20. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  21. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  22. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  23. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  24. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  25. // THE SOFTWARE.
  26. //
  27. #if os(OSX)
  28. import Cocoa
  29. #elseif os(iOS) || os(tvOS)
  30. import UIKit
  31. #elseif os(watchOS)
  32. import WatchKit
  33. #endif
  34. #if os(OSX)
  35. /// The image type for the current platform.
  36. public typealias Image = NSImage
  37. #elseif os(iOS) || os(tvOS) || os(watchOS)
  38. /// The image type for the current platform.
  39. public typealias Image = UIImage
  40. #endif
  41. #if os(OSX) || os(iOS) || os(tvOS) || os(watchOS)
  42. extension Image: ReadableWritable, WritableConvertible {
  43. /// Returns an image from the given path.
  44. ///
  45. /// - Parameter path: The path to be returned the image for.
  46. /// - Throws: FileKitError.ReadFromFileFail
  47. ///
  48. public class func read(from path: Path) throws -> Self {
  49. guard let contents = self.init(contentsOfFile: path._safeRawValue) else {
  50. throw FileKitError.readFromFileFail(path: path, error: FileKitError.ReasonError.conversion(Image.self))
  51. }
  52. return contents
  53. }
  54. /// Returns `TIFFRepresentation` on OS X and `UIImagePNGRepresentation` on
  55. /// iOS, watchOS, and tvOS.
  56. public var writable: Data {
  57. #if os(OSX)
  58. return self.tiffRepresentation ?? Data()
  59. #else
  60. return self.pngData() ?? Data()
  61. #endif
  62. }
  63. /// Retrieves an image from a URL.
  64. public convenience init?(url: URL) {
  65. #if os(OSX)
  66. self.init(contentsOf: url)
  67. #else
  68. guard let data = try? Data(contentsOf: url) else {
  69. return nil
  70. }
  71. self.init(data: data)
  72. #endif
  73. }
  74. /// Retrieves an image from a URL string.
  75. public convenience init?(urlString string: String) {
  76. guard let url = URL(string: string) else {
  77. return nil
  78. }
  79. self.init(url: url)
  80. }
  81. }
  82. #endif