【问题标题】:error in imagic librarie - phpimagic 库中的错误 - php
【发布时间】:2011-04-14 17:40:01
【问题描述】:

我正在尝试在眩晕服务中使用 Imagick 类

我有这个表格

<form action="thumb.php" method="post" enctype="multipart/form-data">
   <p>
      <label for="file">Select a file:</label> 
      <input type="file" name="userfile" id="file"> <br />
      <button>Upload File</button>
   <p>
</form>

还有这个 php

<?php

error_reporting(-1);

$imagePath = $_FILES["userfile"];

$thumbnailWidth = 100;
$thumbnailHeight = 100;

$srgbPath = 'thumb/sRGB_v4_ICC_preference.icc';

$image = new Imagick($imagePath);

$width = $image->getImageWidth();
$height = $image->getImageHeight();

$srgb = file_get_contents($srgbPath);
$image->profileImage('icc', $srgb);

$image->stripImage();

$image->setImageColorspace(Imagick::COLORSPACE_SRGB);

$fitWidth = ($thumbnailWidth / $width) < ($thumbnailHeight / $height);

$image->thumbnailImage(
$fitWidth ? $thumbnailWidth : 0,
$fitWidth ? 0 : $thumbnailHeight
);

$imagePathParts = pathinfo($imagePath);
$thumbnailPath = "thumb/miniaturas/".
$imagePathParts['filename'].'_'.
$thumbnailWidth.'x'.$thumbnailHeight.'.jpg';

$image->setImageCompressionQuality(90);

$image->writeImage($thumbnailPath);
echo $image;
$image->clear();
$image->destroy();

?>

我收到此错误:

致命错误:未捕获的异常“ImagickException”和消息“无法打开图像‘C:\Users\fel\VertrigoServ\www\login\main_image.jpg’:没有这样的文件或目录@error/blob.c/OpenBlob /2587' 在 C:\Users\fel\VertrigoServ\www\login\thumb.php:12 堆栈跟踪:#0 C:\Users\fel\VertrigoServ\www\login\thumb.php(12):Imagick-> __construct(Array) #1 {main} 在第 12 行的 C:\Users\fel\VertrigoServ\www\login\thumb.php 中抛出

我正在尝试打开位于桌面中的图像,但错误似乎在 localhost 粘贴中搜索:

`C:\Users\fel\VertrigoServ\www\login\main_image.jpg':

有什么想法吗?

如果我改变这个

$imagePath = $_FILES["userfile"];

到这里

$imagePath = 'thumb/main.jpg';

一切正常

谢谢

【问题讨论】:

    标签: php imagick


    【解决方案1】:

    您遇到的一个核心问题是上传文件的路径。 $_FILES["userfile"]; 不会给您文件路径,它会为您提供一系列文件详细信息(请参阅http://www.w3schools.com/PHP/php_file_upload.asp 了解更多信息)。

    您的图像将被复制到 PHP 临时目录中,可以使用 $imagePath = $_FILES['userfile']['tmp_name']; 找到它的位置。

    默认情况下,PHP 将在运行脚本的文件夹中查找,这就是它查找 C:\Users\fel\VertrigoServ\www\login 的原因。这意味着您需要该文件夹中的“thumbs”目录(保存缩略图的位置),或者提供正确位置的完整路径。

    其余代码乍一看还不错:)

    【讨论】:

    • 伙计,另一个与此脚本相关的问题。实际上名称是 php1EEA_100x100 或 php65BA_100x100。这个名字总是不一样?那么,我可以将它存储在数据库中而没有被覆盖的风险吗?
    • 实际上,名称可能会有所不同,尽管我认为没有什么可以强迫它们独一无二。要记住的一件事 - 我不确定这是否相关 - 上传的图像在完成后会被 PHP 丢弃,因为它位于临时目录中。如果您以后需要原始图像,则需要使用move_uploaded_file() 将其永久保存。更多信息:php.net/manual/en/function.move-uploaded-file.php
    【解决方案2】:

    使用:

    $imagePath = $_FILES["userfile"]["tmp_name"];
    

    w3Schools ref

    主要的$_FILES["userfile"] 是一个包含所有文件信息的数组。

    【讨论】:

      猜你喜欢
      • 2011-04-21
      • 2011-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      • 2012-03-11
      • 1970-01-01
      相关资源
      最近更新 更多