php获取图像,旋转并保存服务器上的旋转图像

时间:2014-12-18 07:53:28

标签: php image

想从自己的服务器拍摄图像旋转特定角度并保存图像。

图片文件$filename = 'kitten_rotated.jpg';使用echo '<img src='.$filename.'>';我会看到图片。

然后

$original = imagecreatefromjpeg($filename);
$angle = 90.0;
$rotated = imagerotate($original, $angle, 0);

根据此https://stackoverflow.com/a/3693075/2118559答案尝试创建图片文件

$output = 'google.com.jpg';

如果我使用新文件名保存相同的图像,则全部工作

file_put_contents( $output, file_get_contents($filename) );

但如果我尝试保存旋转的图像,那么file_put_contents(): supplied resource is not a valid stream resource

file_put_contents( $output, $rotated );

此处https://stackoverflow.com/a/12185462/2118559已阅读$export is going to be a GD image handle. It is NOT something you can simply dump out to a file and expect to get a JPG or PNG image..,但无法理解如何在该答案中使用该代码。

如何从$rotated创建图像文件?

尝试根据此http://php.net/manual/en/function.imagecreatefromstring.php

进行实验
$fh = fopen( 'some_name.png' , 'w') or die("can't open file");
fwrite($fh, $data );
fclose($fh);

这是否意味着需要像

这样的东西
$data = base64_encode($rotated);

然后写入新文件?

3 个答案:

答案 0 :(得分:2)

我没有对此进行测试,但我认为您需要先将图像编码为base 64。

如果从任何图像URL检查字符串,您会在哈希之前看到data:image/png;base64,。将其添加到图像字符串并保存。

答案 1 :(得分:1)

根据您已有的功能,这是一个可能有用的功能:

// Function settings:
// 1) Original file
// 2) Angle to rotate
// 3) Output destination (false will output to browser)

function RotateJpg($filename = '',$angle = 0,$savename = false)
    {
        // Your original file
        $original   =   imagecreatefromjpeg($filename);
        // Rotate
        $rotated    =   imagerotate($original, $angle, 0);
        // If you have no destination, save to browser
        if($savename == false) {
                header('Content-Type: image/jpeg');
                imagejpeg($rotated);
            }
        else
            // Save to a directory with a new filename
            imagejpeg($rotated,$savename);

        // Standard destroy command
        imagedestroy($rotated);
    }

// Base image
$filename   =   'http://upload.wikimedia.org/wikipedia/commons/b/b4/JPEG_example_JPG_RIP_100.jpg';

// Destination, including document root (you may have a defined root to use)
$saveto     =   $_SERVER['DOCUMENT_ROOT']."/images/test.jpg";

// Apply function
RotateJpg($filename,90,$saveto);

答案 2 :(得分:1)

如果要保存图像,只需使用GD库函数之一:imagepng()或imagepng()。

imagerotate()返回图像资源,所以这不像字符串。

在您的情况下,只需保存旋转图像:

imagejpg($rotated, $output);

现在您可以使用$ output变量作为新文件名,以便像以前一样包含在视图中:

echo '<img src='.$output.'>';

请勿忘记在您保存图片的目录中包含适当的权限。