如何使用AWS S3进行图像处理(PHP)

时间:2015-08-13 07:26:04

标签: php amazon-s3 aws-sdk

对于我的网站,我想使用API​​使用AWS S3服务存储所有图像。

如何通过API / SDK做这件事

1)如何使用API​​(来自我的网站)将图像/文件上传到不同的文件夹中。

2)如何动态调整大小/裁剪图像。例如50x50像素,250x250像素。

3)强制下载。

谢谢

2 个答案:

答案 0 :(得分:3)

我认为AWS没有内置功能来调整S3中任何存储图像的大小。如eldblz所述,您必须自行调整大小。您可以使用S3流包装器。

S3流包装器非常棒:http://docs.aws.amazon.com/aws-sdk-php/v2/guide/feature-s3-stream-wrapper.html

它允许您使用内置的PHP函数,如file_get_contents和file_put_contents。

  1. 获取原始文件的详细信息:

    # If you have stream wrapper enabled, 
    # getimagesize will get information from the S3
    # you have to pass the S3 URI though
    list($width, $height) = getimagesize('s3://bucket/key');
    
    # making the new image 50x50
    $new_width = 50;
    $new_height = 50;
    
    $new_image = imagecreatetruecolor($new_width, $new_height);
    
  2. 使用file_get_contents(或fopen)获取图像数据:

    $data = file_get_contents('s3://bucket/key');
    
  3. 从数据创建图像资源并调整大小:

    $source = imagecreatefromstring($data); 
    
    # Resize
    imagecopyresized($new_image, $source, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
    
  4. 输出:

    header('Content-Type: image/jpeg');
    imagejpeg($thumb);
    
  5. 希望这有帮助!

答案 1 :(得分:0)

你的问题有点模糊,所以答案不准确。我将提供一些建议或图书馆开始:

  1. 如何使用API​​(来自我的网站)将图像/文件上传到不同的文件夹中。
  2. 这个库应该是开始使用S3和文件的好地方: https://github.com/tpyo/amazon-s3-php-class

    1. 如何动态调整图像大小/裁剪图像。例如50x50像素,250x250像素。
    2. 这应该可以解决问题:https://github.com/eventviva/php-image-resize 或者你可以试试PHP Imagick:http://php.net/manual/en/book.imagick.php

      1. 强行下载。
      2. Stackoverflow已经为您提供了答案: How to force file download with PHP

        希望这有助于您入门。