首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Imagick格式转换

Imagick格式转换
EN

Stack Overflow用户
提问于 2021-08-06 13:13:01
回答 1查看 54关注 0票数 0

我正在尝试创建使用Imagick从pdf上传缩略图。我写了一个脚本来完成它,但是,它只上传文件而没有创建缩略图。这肯定会让你们中的一些人眼花缭乱,但是,PHP对我来说是完全未知的领域。有人能帮我吗?谢谢!

代码语言:javascript
复制
<?php
    include 'includes/session.php';
    include 'includes/slugify.php';

    if(isset($_POST['add'])){
        $name = $_POST['name'];
        $slug = slugify($name);
        $category = $_POST['category'];
        $price = $_POST['price'];
        $description = $_POST['description'];
        $filename = $_FILES['photo']['name'];
        $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
        $allowed = array('pdf', 'doc', 'docx', 'odc', 'jpg');


        $conn = $pdo->open();

        $stmt = $conn->prepare("SELECT *, COUNT(*) AS numrows FROM products WHERE slug=:slug");
        $stmt->execute(['slug'=>$slug]);
        $row = $stmt->fetch();

        if($row['numrows'] > 0){
            $_SESSION['error'] = 'document already exists';
        }
        else{
            if(!in_array($ext, $allowed)) {
            $_SESSION['error'] = 'Filetype not allowed';
        }
         
        else{
            if(!empty($filename)){
                $new_filename = $slug.'.'.$ext;
                copy($_FILES['photo']['tmp_name'], '../documents/'.$new_filename);
                    
            }
            else{
                $new_filename = '';

创建缩略图

代码语言:javascript
复制
               $img = new Imagick($filename[0]); 
               $img-> setImageFormat('jpg');
               $convert = $slug. '.' .$jpg;
               $img-> writeImages($_FILES['photo']['tmp_name'], '../images/'.$convert);

            }




            try{
                $stmt = $conn->prepare("INSERT INTO products (category_id, name, description, 
            slug, price, photo) VALUES (:category, :name, :description, :slug, :price, : 
               photo)");
                $stmt->execute(['category'=>$category, 'name'=>$name, 
           'description'=>$description, 
               'slug'=>$slug, 'price'=>$price, 'photo'=>$new_filename]);
                $_SESSION['success'] = 'document added successfully';
             
             
            
            }
            catch(PDOException $e){
                $_SESSION['error'] = $e->getMessage();
            }
        }
}
        $pdo->close();
    }
    else{
        $_SESSION['error'] = 'Fill up product form first';
    }

    header('location: documents.php');

?>
EN

回答 1

Stack Overflow用户

发布于 2021-08-08 05:15:42

似乎您对$img->writeImages($_FILES['photo']['tmp_name'], '../images/'.$convert)的调用是不正确的:您正在传递两个字符串(上传的图像的文件名和看起来像目标文件名的文件名),但是Imagick文档指示您应该只传递一个目标文件名(以及一个可选的布尔值)。

所以这个:

代码语言:javascript
复制
$img-> writeImages($_FILES['photo']['tmp_name'], '../images/'.$convert);

可能应该是:

代码语言:javascript
复制
$img-> writeImages('../images/'.$convert);

另外,很难判断您发布的两块PHP是否是一个接一个地来的,但是如果是这样的话,那么您创建图像的逻辑看起来就有问题:

代码语言:javascript
复制
if(!empty($filename)){
    // Do some stuff
} else {
    // Write the images
}

这里的问题是,只在$filename为空时才执行写入映像的代码块。如果$filename不是空的,它不应该写图像吗?

最后但并非最不重要的是,Imagick writeImages()函数返回一个布尔值,指示它是否成功。您应该存储这个结果并记录下来,看看结果是什么。您还应该确认您的目标文件名('../images/'.$convert)是正确的,并且路径是存在的并且是可写的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68682172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档