Интерфейс Amazon S3 с PHP? [закрытый]

Я обнаружил, что трудно найти ответ, который вы можете использовать «из коробки» в своем проекте Swift 3 . Основная проблема других ответов в том, что они не соблюдают альфа-канал изображения. Вот техника, которую я использую в своих проектах.

extension UIImage {

    func scaledToFit(toSize newSize: CGSize) -> UIImage {
        if (size.width < newSize.width && size.height < newSize.height) {
            return copy() as! UIImage
        }

        let widthScale = newSize.width / size.width
        let heightScale = newSize.height / size.height

        let scaleFactor = widthScale < heightScale ? widthScale : heightScale
        let scaledSize = CGSize(width: size.width * scaleFactor, height: size.height * scaleFactor)

        return self.scaled(toSize: scaledSize, in: CGRect(x: 0.0, y: 0.0, width: scaledSize.width, height: scaledSize.height))
    }

    func scaled(toSize newSize: CGSize, in rect: CGRect) -> UIImage {
        if UIScreen.main.scale == 2.0 {
            UIGraphicsBeginImageContextWithOptions(newSize, !hasAlphaChannel, 2.0)
        }
        else {
            UIGraphicsBeginImageContext(newSize)
        }

        draw(in: rect)
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return newImage ?? UIImage()
    }

    var hasAlphaChannel: Bool {
        guard let alpha = cgImage?.alphaInfo else {
            return false
        }
        return alpha == CGImageAlphaInfo.first ||
            alpha == CGImageAlphaInfo.last ||
            alpha == CGImageAlphaInfo.premultipliedFirst ||
            alpha == CGImageAlphaInfo.premultipliedLast
    }
}

Пример использования:

override func viewDidLoad() {
    super.viewDidLoad()

    let size = CGSize(width: 14.0, height: 14.0)
    if let image = UIImage(named: "barbell")?.scaledToFit(toSize: size) {
        let imageView = UIImageView(image: image)
        imageView.center = CGPoint(x: 100, y: 100)
        view.addSubview(imageView)
    }
}

Этот код является переписанным расширения Apple с добавленной поддержкой изображений с альфа-каналом и без него.

В качестве дальнейшего чтения я рекомендую проверить эту статью для различных методов изменения размера изображения. Текущий подход предлагает достойную производительность, он работает с высокоуровневыми API и легок для понимания. Я рекомендую придерживаться этого, если только вы не обнаружите, что изменение размера изображения является узким местом в вашей работе.

10
задан Joel Martinez 5 July 2009 в 20:05
поделиться

4 ответа

Для обходного пути, который вы используете, необходимо предоставить секретный ключ стороннему веб-сайту. Это очень небезопасно и просто плохая практика.

Почему бы не использовать S3fm?

http://s3.amazonaws.com/s3fm/index.html

В сети, безопасно, удобно. Работает прямо с Amazon S3 - не нужно никому делиться секретными ключами.

4
ответ дан 3 December 2019 в 20:43
поделиться

Взгляните на компоненты Amazon Zend Framework - не волнуйтесь, их можно использовать вместе с любыми другими частями Zend.

http://framework.zend.com/ manual / en / zend.service.amazon.s3.html

3
ответ дан 3 December 2019 в 20:43
поделиться

Amazon официально поддерживает Tarzan AWS

0
ответ дан 3 December 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: