使用 PHP 和 GD2 调整图像大小。我得到图像和黑色背景
我正在创建一个动态类来生成各种图像。
ImagesUtils.php
<?php
class ImagesUtils
{
private $nombre_imagen = null;
private $imagen = null;
private $extension = null;
private $directorio = null;
private $width = null;
private $height = null;
private $tipo = null;
private $final_width = null;
private $final_height = null;
private $nuevo_nombre = null;
private $nuevo_directorio = null;
public function __construct($imagen, $directorio = '')
{
$this->directorio = realpath("..".DS."data".DS."storage".DS."files".DS.$directorio);
$this->imagen = $this->directorio.DS.$imagen;
$this->nombre_imagen = $imagen;
$this->extension = substr($imagen, strrpos($imagen, '.') + 1, strlen($imagen));
$propiedades = getimagesize($this->imagen);
$this->width = $propiedades["0"];
$this->height = $propiedades["1"];
$this->tipo = $propiedades["2"];
}
public function Resize($width = null, $height = null, $proporcion = true)
{
$this->final_width = $width;
$this->final_height = $height;
if(true == $proporcion)
self::proporcion($width, $height);
$imagen = imagecreatefromjpeg($this->imagen);
$nueva_imagen = imagecreatetruecolor($this->final_width, $this->final_height);
imagecopyresampled($nueva_imagen, $imagen, 0, 0, 0, 0, $this->final_width, $this->final_height, $this->width, $this->height);
return imagejpeg($image, $this->nueva_imagen);
}
}
?>
我如何调用:
$procesar_imagen = new ImagesUtils($imagen["nombre"]);
$procesar_imagen->Resize(640, 480);
宽度此代码工作正常...但如果我使用此:
$procesar_imagen->Resize(300, 300);
我生成的最终图像如下所示: http://i51.tinypic.com/htwx79.jpg
输入图像为:http://i51.tinypic.com/15n9ifc.jpg
我不知道如何解决它......我的 proporcion() 函数返回新的高度和宽度照片的长宽比...我检查过,值是正确的,返回的宽度是300(最终图像宽度是300...但计算黑色区域)。
I'm creating a dynamic class to generate various images.
ImagesUtils.php
<?php
class ImagesUtils
{
private $nombre_imagen = null;
private $imagen = null;
private $extension = null;
private $directorio = null;
private $width = null;
private $height = null;
private $tipo = null;
private $final_width = null;
private $final_height = null;
private $nuevo_nombre = null;
private $nuevo_directorio = null;
public function __construct($imagen, $directorio = '')
{
$this->directorio = realpath("..".DS."data".DS."storage".DS."files".DS.$directorio);
$this->imagen = $this->directorio.DS.$imagen;
$this->nombre_imagen = $imagen;
$this->extension = substr($imagen, strrpos($imagen, '.') + 1, strlen($imagen));
$propiedades = getimagesize($this->imagen);
$this->width = $propiedades["0"];
$this->height = $propiedades["1"];
$this->tipo = $propiedades["2"];
}
public function Resize($width = null, $height = null, $proporcion = true)
{
$this->final_width = $width;
$this->final_height = $height;
if(true == $proporcion)
self::proporcion($width, $height);
$imagen = imagecreatefromjpeg($this->imagen);
$nueva_imagen = imagecreatetruecolor($this->final_width, $this->final_height);
imagecopyresampled($nueva_imagen, $imagen, 0, 0, 0, 0, $this->final_width, $this->final_height, $this->width, $this->height);
return imagejpeg($image, $this->nueva_imagen);
}
}
?>
And how I call:
$procesar_imagen = new ImagesUtils($imagen["nombre"]);
$procesar_imagen->Resize(640, 480);
Width this code works fine... but if I use this:
$procesar_imagen->Resize(300, 300);
My final image generated looks like: http://i51.tinypic.com/htwx79.jpg
The input image is: http://i51.tinypic.com/15n9ifc.jpg
I don't know how to solve it... my proporcion() function returns the new height and width from the aspect ratio of the photo... I checked and the values are right, the width returned is 300 (and the final image width is 300... but counting the black area).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我知道您正在尝试编写自己的代码,但您可能想看看这个:http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php
I know you're trying to write your own code, but you might want to have a look at this: http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php