una - Carga temporal de archivo PHP no válida Recurso de imagen
subir video a wordpress error http (1)
Hola, tengo una clase para cambiar el tamaño de las imágenes (resizeManager.php):
Class ResizeManager
{
// *** Class variables
private $image;
private $width;
private $height;
private $imageResized;
function __construct($fileName)
{
// *** Open up the file
$this->image = $this->openImage($fileName);
// *** Get width and height
$this->width = imagesx($this->image);
$this->height = imagesy($this->image);
}
## --------------------------------------------------------
private function openImage($file)
{
// *** Get extension
$extension = strtolower(strrchr($file, ''.''));
switch($extension)
{
case ''.jpg'':
case ''.jpeg'':
$img = @imagecreatefromjpeg($file);
break;
case ''.gif'':
$img = @imagecreatefromgif($file);
break;
case ''.png'':
$img = @imagecreatefrompng($file);
break;
default:
$img = false;
break;
}
return $img;
}
## --------------------------------------------------------
public function resizeImage($newWidth, $newHeight, $option="auto")
{
// *** Get optimal width and height - based on $option
$optionArray = $this->getDimensions($newWidth, $newHeight, $option);
$optimalWidth = $optionArray[''optimalWidth''];
$optimalHeight = $optionArray[''optimalHeight''];
// *** Resample - create image canvas of x, y size
$this->imageResized = imagecreatetruecolor($optimalWidth, $optimalHeight);
imagecopyresampled($this->imageResized, $this->image, 0, 0, 0, 0, $optimalWidth, $optimalHeight, $this->width, $this->height);
// *** if option is ''crop'', then crop too
if ($option == ''crop'') {
$this->crop($optimalWidth, $optimalHeight, $newWidth, $newHeight);
}
}
## --------------------------------------------------------
private function getDimensions($newWidth, $newHeight, $option)
{
switch ($option)
{
case ''exact'':
$optimalWidth = $newWidth;
$optimalHeight= $newHeight;
break;
case ''portrait'':
$optimalWidth = $this->getSizeByFixedHeight($newHeight);
$optimalHeight= $newHeight;
break;
case ''landscape'':
$optimalWidth = $newWidth;
$optimalHeight= $this->getSizeByFixedWidth($newWidth);
break;
case ''auto'':
$optionArray = $this->getSizeByAuto($newWidth, $newHeight);
$optimalWidth = $optionArray[''optimalWidth''];
$optimalHeight = $optionArray[''optimalHeight''];
break;
case ''crop'':
$optionArray = $this->getOptimalCrop($newWidth, $newHeight);
$optimalWidth = $optionArray[''optimalWidth''];
$optimalHeight = $optionArray[''optimalHeight''];
break;
}
return array(''optimalWidth'' => $optimalWidth, ''optimalHeight'' => $optimalHeight);
}
## --------------------------------------------------------
private function getSizeByFixedHeight($newHeight)
{
$ratio = $this->width / $this->height;
$newWidth = $newHeight * $ratio;
return $newWidth;
}
private function getSizeByFixedWidth($newWidth)
{
$ratio = $this->height / $this->width;
$newHeight = $newWidth * $ratio;
return $newHeight;
}
private function getSizeByAuto($newWidth, $newHeight)
{
if ($this->height < $this->width)
// *** Image to be resized is wider (landscape)
{
$optimalWidth = $newWidth;
$optimalHeight= $this->getSizeByFixedWidth($newWidth);
}
elseif ($this->height > $this->width)
// *** Image to be resized is taller (portrait)
{
$optimalWidth = $this->getSizeByFixedHeight($newHeight);
$optimalHeight= $newHeight;
}
else
// *** Image to be resizerd is a square
{
if ($newHeight < $newWidth) {
$optimalWidth = $newWidth;
$optimalHeight= $this->getSizeByFixedWidth($newWidth);
} else if ($newHeight > $newWidth) {
$optimalWidth = $this->getSizeByFixedHeight($newHeight);
$optimalHeight= $newHeight;
} else {
// *** Sqaure being resized to a square
$optimalWidth = $newWidth;
$optimalHeight= $newHeight;
}
}
return array(''optimalWidth'' => $optimalWidth, ''optimalHeight'' => $optimalHeight);
}
## --------------------------------------------------------
private function getOptimalCrop($newWidth, $newHeight)
{
$heightRatio = $this->height / $newHeight;
$widthRatio = $this->width / $newWidth;
if ($heightRatio < $widthRatio) {
$optimalRatio = $heightRatio;
} else {
$optimalRatio = $widthRatio;
}
$optimalHeight = $this->height / $optimalRatio;
$optimalWidth = $this->width / $optimalRatio;
return array(''optimalWidth'' => $optimalWidth, ''optimalHeight'' => $optimalHeight);
}
## --------------------------------------------------------
private function crop($optimalWidth, $optimalHeight, $newWidth, $newHeight)
{
// *** Find center - this will be used for the crop
$cropStartX = ( $optimalWidth / 2) - ( $newWidth /2 );
$cropStartY = ( $optimalHeight/ 2) - ( $newHeight/2 );
$crop = $this->imageResized;
//imagedestroy($this->imageResized);
// *** Now crop from center to exact requested size
$this->imageResized = imagecreatetruecolor($newWidth , $newHeight);
imagecopyresampled($this->imageResized, $crop , 0, 0, $cropStartX, $cropStartY, $newWidth, $newHeight , $newWidth, $newHeight);
}
## --------------------------------------------------------
public function saveImage($savePath, $imageQuality="100")
{
// *** Get extension
$extension = strrchr($savePath, ''.'');
$extension = strtolower($extension);
switch($extension)
{
case ''.jpg'':
case ''.jpeg'':
if (imagetypes() & IMG_JPG) {
imagejpeg($this->imageResized, $savePath, $imageQuality);
}
break;
case ''.gif'':
if (imagetypes() & IMG_GIF) {
imagegif($this->imageResized, $savePath);
}
break;
case ''.png'':
// *** Scale quality from 0-100 to 0-9
$scaleQuality = round(($imageQuality/100) * 9);
// *** Invert quality setting as 0 is best, not 9
$invertScaleQuality = 9 - $scaleQuality;
if (imagetypes() & IMG_PNG) {
imagepng($this->imageResized, $savePath, $invertScaleQuality);
}
break;
// ... etc
default:
// *** No extension - No save.
break;
}
imagedestroy($this->imageResized);
}
}
En mi página (mypage.php) quiero cambiar el tamaño de la imagen cargada solo si su ancho es> 800px o alto> 600px.
Entonces escribí:
list($width, $height, $type, $attr) = getimagesize($_FILES[''pictures''][''tmp_name''][$number]);
if($width>800 || $height>600)
{
$resizemgr = new ResizeManager($_FILES[''pictures''][''tmp_name''][$number]);
//then the actual resizing
[...]
}
else
$ret=@move_uploaded_file($_FILES[''pictures''][''tmp_name''][$number],$destinationFile);
Pero recibo estos errores
Warning: imagesx(): supplied argument is not a valid Image resource in resizeManager.php
Warning: imagesy(): supplied argument is not a valid Image resource in resizeManager.php
¿Puedo apuntar a un archivo temporal de esta manera?
Gracias
luca
Prueba a continuación Ejemplo:
<form method="post" enctype="multipart/form-data" action="">
<input type="file" name="file" />
<div class="td" style="width: 100%; text-align: left;"><button type="submit">OK</button></div>
</form>
<?php
if( isset( $_FILES[''file''] ) )
{
$img = file_get_contents( $_FILES[''file''][''tmp_name''] );
$image = imagecreatefromstring( $img );
echo imagesx( $image );
}
?>