我从这里获得了一个代码http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php,以便用户调整发送的图片大小。
这是处理发送图像的方式。
include('image_resize.php');
$image = new SimpleImage();
$image->load($upload_dir.$filename);
$image->resizeToWidth(190);
$image->save($upload_dir.$filename);
这是image_resize.php
:
function resizeToWidth($width) {
$ratio = $width / $this->getWidth();
$height = $this->getheight() * $ratio;
$this->resize($width,$height);
}
function resize($width,$height) {
$new_image = imagecreatetruecolor($width, $height);
imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
$this->image = $new_image;
}
我不会粘贴所有代码,因为直到这里eveything工作正常。
问题是,当我直接从手机摄像头上传照片时,我遇到了方向问题,所以我写道:
function resize($width,$height) {
$exif = exif_read_data($this->image, 0, true);
if(!empty($exif['IFD0']['Orientation'])) {
switch($exif['Orientation']) {
case 3: // 180 rotate left
$this->image = imagerotate($this->image, 180, 0);
break;
case 6: // 90 rotate right
$this->image = imagerotate($this->image, -90, 0);
break;
case 8: // 90 rotate left
$this->image = imagerotate($this->image, 90, 0);
break;
}
}
$new_image = imagecreatetruecolor($width, $height);
imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
$this->image = $new_image;
}
但是当我运行它时,服务器说:
exif_read_data() expects parameter 1 to be string, resource given in /home/…/public_html/image_resize.php on line 101
这是第101行:$exif = exif_read_data($this->image, 0, true);
我搜索了exif_read_data()
的问题,但我找不到“给定资源”的含义,正如我在其他问题和文档中看到的那样,您可以使用临时图像作为参数。
所以问题是:我如何处理$image->this
以使其不被视为资源?
答案 0 :(得分:0)
$this->image
是一种图像资源,由imagecreatetruecolor()
等函数创建,它是图像的表示。对于exif函数,您必须指定(字符串)文件名。
所以看起来应该是这样的:
function load($filename) {
$this->filename = $filename;
// ...
}
function resize($width,$height) {
$exif = exif_read_data($this->filename, 0, true);
// ...
}