首页后端开发PHP图片旋转不了?来看看php是怎么样做

图片旋转不了?来看看php是怎么样做

时间2024-03-22 07:32:03发布访客分类PHP浏览1203
导读:这篇文章主要给大家介绍“图片旋转不了?来看看php是怎么样做”的相关知识,下文通过实际案例向大家展示操作过程,内容简单清晰,易于学习,有这方面学习需要的朋友可以参考,希望这篇“图片旋转不了?来看看php是怎么样做”文章能对大家有所帮助。 最...
这篇文章主要给大家介绍“图片旋转不了?来看看php是怎么样做”的相关知识,下文通过实际案例向大家展示操作过程,内容简单清晰,易于学习,有这方面学习需要的朋友可以参考,希望这篇“图片旋转不了?来看看php是怎么样做”文章能对大家有所帮助。

最近有一个需求需要将前端上传过来的图片进行逆时针旋转90°,这个主要需要使用到php的imagerotate方法对于图片进行旋转,具体实现方法如下:

?php
 
namespace common\traits;
    
 
use Yii;
    
use yii\helpers\FileHelper;

 
/**
 * 图片旋转处理trait
 *
 * @author wangjian
 * @since 1.0
 */
class ImageRotate
{

 
    /**
     * base64图片旋转
     * @param $image 需要旋转的base64图片
     * @param string $rotate 逆时针旋转角度
     * @param false $savePath 保存的图片路径,false返回base64格式
     */
    public static function base64Rotate($image, $rotate = '90', $savePath = false)
    {

        if (empty($image)) {
    
            return false;

        }
    
        if (preg_match('/^(data:\s*image\/(\w+);
base64,)/', $image, $result)) {
    
            $type = $result[2];
    
            //设置临时目录
            $temporaryPath = '/tmp/';
    
            $temporaryPath = dirname(Yii::getAlias('@common')) . '/web' . $temporaryPath;
    
            FileHelper::createDirectory($temporaryPath);
    
 
            //将原图保存到零食目录
            $temporaryImage = date('YmdHis') . rand(1000, 9999) . '.' . $type;

            if (file_put_contents($temporaryPath . $temporaryImage, base64_decode(str_replace($result[1], '', $image)))) {
    
                $newImage = self::rotateImage($temporaryPath . $temporaryImage, $rotate);
     //旋转图片
                //删除临时文件
                @unlink($temporaryPath . $temporaryImage);
    
 
                ob_start();

                if ($savePath === false) {
     //返回base
                    imagepng($newImage);
    
                    $imageString = $result[1] . base64_encode(ob_get_contents());
    
                    @unlink($newImage);

                }
 else {
    
                    $imageString = imagepng($newImage, $savePath);

                }
    
                ob_end_clean();
    
 
                return $imageString;

            }

        }
    
 
        return false;

    }

 
    /**
     * 本地图片旋转
     * @param $image 需要旋转的本地图片
     * @param string $rotate 逆时针旋转角度
     * @param false $savePath 保存的图片路径,false返回替换原图
     */
    public static function imageRotate($image, $rotate = '90', $savePath = false)
    {

        if (empty($image)) {
    
            return false;

        }
    
        //旋转图片
        $newImage = self::rotateImage($image, $rotate);
    
        ob_start();

        if ($savePath === false) {
    
            //替换原图
            $url = $image;

        }
 else {
    
            $url = $savePath;

        }
    
        $imageString = imagepng($newImage, $url);
    
        ob_end_clean();
    
        return $imageString;

    }

 
    /**
     * @param $file 需要旋转的图片
     * @param $rotate 逆时针旋转角度
     */
    private static function rotateImage($file, $rotate)
    {
    
        $imageSize = getimagesize($file);
    
        $imageSize = explode('/', $imageSize['mime']);
    
        $type = $imageSize[1];

 
        switch ($type) {
    
            case "png":
                $image = imagecreatefrompng($file);
    
                break;
    
            case "jpeg":
                $image = imagecreatefromjpeg($file);
    
                break;
    
            case "jpg":
                $image = imagecreatefromjpeg($file);
    
                break;
    
            case "gif":
                $image = imagecreatefromgif($file);
    
                break;

        }
    
        $rotateImage = imagerotate($image, $rotate, 0);
     //逆时针旋转
        //获取旋转后的宽高
        $srcWidth = imagesx($rotateImage);
    
        $srcHeight = imagesy($rotateImage);
    
        //创建新图
        $newImage = imagecreatetruecolor($srcWidth, $srcHeight);
    
        //分配颜色 + alpha,将颜色填充到新图上
        $alpha = imagecolorallocatealpha($newImage, 0, 0, 0, 127);
    
        imagefill($newImage, 0, 0, $alpha);
    
        //将源图拷贝到新图上,并设置在保存 PNG 图像时保存完整的 alpha 通道信息
        imagecopyresampled($newImage, $rotateImage, 0, 0, 0, 0, $srcWidth, $srcHeight, $srcWidth, $srcHeight);
    
        imagesavealpha($newImage, true);
    
 
        return $newImage;

    }

 
}
    

具体使用:

1:base64图片旋转并输出base64

ImageRotate::base64Rotate('base64图片', '旋转角度');
    

2:base64图片旋转并保存

ImageRotate::base64Rotate('base64图片', '旋转角度', '保存地址');
    

3:本地图片旋转

ImageRotate::imageRotate('本地图片地址', '旋转角度', '保存地址');
    

根据上面的方法我们就可以实现图片的旋转功能了


以上就是关于“图片旋转不了?来看看php是怎么样做”的介绍了,感谢各位的阅读,希望文本对大家有所帮助。如果想要了解更多知识,欢迎关注网络,小编每天都会为大家更新不同的知识。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

图片旋转

若转载请注明出处: 图片旋转不了?来看看php是怎么样做
本文地址: https://pptw.com/jishu/650205.html
Oracle基础学习中哪些知识点要了解 php文字水印出现乱码,有哪些解决思路?

游客 回复需填写必要信息