Array
(
)

Ajuda - Processamento de Imagem

PHP
Mateus
   - 30 jul 2014

Olá, estou fazendo um Sistema que irá Gerar um Código CSS e Mandar ao Usuário, porém está Dando o Seguinte Erro:
#Código

<br />
<b>Warning</b>:  imagecreatefrompng(1406765838.png) [<a href='function.imagecreatefrompng'>function.imagecreatefrompng</a>]: failed to open stream: No such file or directory in <b>/home/Coestar/public_html/pixel.php</b> on line <b>17</b><br />
<br />
<b>Warning</b>:  getimagesize(1406765838.png) [<a href='function.getimagesize'>function.getimagesize</a>]: failed to open stream: No such file or directory in <b>/home/Coestar/public_html/pixel.php</b> on line <b>20</b><br />
<br />
<b>Warning</b>:  imagecolorat() expects parameter 1 to be resource, boolean given in <b>/home/Coestar/public_html/pixel.php</b> on line <b>44</b><br />
<br />
<b>Warning</b>:  imagecolorsforindex() expects parameter 1 to be resource, boolean given in <b>/home/Coestar/public_html/pixel.php</b> on line <b>44</b><br />
<br />
<b>Warning</b>:  unlink(1406765838.png) [<a href='function.unlink'>function.unlink</a>]: No such file or directory in <b>/home/Coestar/public_html/pixel.php</b> on line <b>60</b><br />
background-color: rgb(, , , 0); box-shadow: 0px 0px 0px transparent, 


#Código
<?php
// Informa ao Navegador que isto é um Arquivo de Texto
Header('Content-Type: text/flat');

// Checa se o Upload foi Feito Corretamente
if($_FILES['texture']['error'] > 0)
    die('Upload Error');

// Define o Nome Final da Imagem
$FinalName = time() . '.png';

// Move a Imagem
if(move_uploaded_file($_FILES['texture']['tmp_name'], $FinalName))
    die('Error Moving Uploaded File');

// Carrega a Imagem
$Image = imagecreatefrompng($FinalName);

// Pega a Altura e Largura da Imagem
list($Width, $Height) = getimagesize($FinalName);

// Checa se o Tamanho é Maior que 320px
if(($Width > 320) || ($Height > 320))
    unlink($FinalName) and die('Max Image Size: 320x320');

// Define o Tamanho de um Pixel
$wPixel = round(320 * $Width);
$hPixel = round(320 * $Height);

// Variável que Guardará o Código
$Code = '';

// Variáveis que vão Guardar as Coordenadas do Pixel Atual
$CurrentPixelW = 0;
$CurrentPixelH = 0;

// Varíaveis que vão Guardar o Tamanho do Pixel da CSS
$cPixelW = 0;
$cPixelH = 0;

// Loop
for($CurrentPixelW = 0; $CurrentPixelW <= $Width; $CurrentPixelW++){
    for($CurrentPixelH = 0; $CurrentPixelH <= $Height; $CurrentPixelH++){
        $Color = imagecolorsforindex($Image, imagecolorat($Image, $Width, $Height));
        if(($CurrentPixelH == 0) && ($CurrentPixelW == 0))
            $Code .= sprintf('background-color: rgb(%s, %s, %s, %s); box-shadow: %spx %spx 0px transparent, ',
                $Color['red'], $Color['green'], $Color['blue'], round($Color['alpha'] * 1.27), $cPixelW, $cPixelH);

        elseif(($CurrentPixelH == $Height) && ($CurrentPixelW == $Width))
            $Code .= sprintf('%spx %spx 0px rgb(%s, %s, %s, %s);',
                $cPixelW, $cPixelH, $Color['red'], $Color['green'], $Color['blue'], round($Color['alpha'] * 1.27));

        else $Code .= sprintf('%spx %spx 0px rgb(%s, %s, %s, %s), ',
            $cPixelW, $cPixelH, $Color['red'], $Color['green'], $Color['blue'], round($Color['alpha'] * 1.27));
        $cPixelW += $wPixel;
    }
    $cPixelH += $hPixel;
    $cPixelW = 0;
}
unlink($FinalName);
print($Code);

Eu Revisei Várias Vezes e Não Achei o Erro :/

Milléo
   - 31 jul 2014

Olá Mateus,

Não consegui reproduzir exatamente as mesmas mensagens de erro mas percebi que o problema reside na declaração da variável $FinalName, coloque um path antes da função time(), deixando a declaração da variável da seguinte forma:

#Código

$FinalName = "/var/www/personal/DevMedia/images/".time() . '.png';


e lembre-se de deixar o diretório com o mesmo owner do apache (evite colocar um chmod 777, por segurança).

Mateus
   - 01 ago 2014

Olá Milléo,

Eu tentei mais não tive Resultados,
O Erro se Consiste no Upload, tentei em Outras Hospedagens e Nada :/

Eduardo (emalherbi.com)
   - 01 ago 2014

Boa Tarde Mateus.

Então foi definido ali...

#Código

// Define o Nome Final da Imagem
$FinalName = time() . '.png';

// Depois

// Carrega a Imagem
$Image = imagecreatefrompng($FinalName);


O erro que o php apresenta é ...
#Código
<br />
<b>Warning</b>:  imagecreatefrompng(1406765838.png) [<a href='function.imagecreatefrompng'>function.imagecreatefrompng</a>]: failed to open stream: No such file or directory in <b>/home/Coestar/public_html/pixel.php</b> on line <b>17</b><br />


o Php vai tentar abrir a imagem 1406765838.png e não encontra. Não acha essa imagem na sua maquina, no seu hd.
A função image create from png, pega uma imagem que você já tem na sua máquina, para ai sim, realizar o tratamento dela.
Então primeiro você salva sua imagem no seu diretório, ai você vai conseguir pegar ela pela função imagecreatefrompng.

[]'s...

Mateus
   - 02 ago 2014

Eduardo,

disso eu Sei, meu Problema não está no 'imagecreatefrompng', e sim no Upload,
não estou Conseguindo Mover o Upload para a pasta Principal, com isso ocorre um erro no 'imagecreatefrompng'

Eduardo (emalherbi.com)
   - 04 ago 2014

Opa, Fiz um exemplo de upload pra ti...

Exemplo de Upload.

NO JS:

#Código

$('#form-photos').validate({
			submitHandler: function( form ) {
 				if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {
                    Alert.show('Seu navegador não tem suporte a arquivos.');
                    return;
                }    

                input = document.getElementById('photos');
                if (!input.files) {
                	Alert.show("Seu navegador não tem suporte a arquivos.");
               	}
               	else if (input.files.length == 0 && $('#id_photos').val() == 0) {
               		Alert.show("Selecione um arquivo para enviar!");               
               	}
               	else {
					for (var i=0, il=input.files.length; i<il; i++) {
						file = input.files[i];
						
						var xhr = new XMLHttpRequest();
						if (xhr.upload && file.type == "image/jpeg" && file.size <= $("#MAX_FILE_SIZE").val()) {
							
							$('#form-photos #photos_name').val( file.name );
							xhr.onreadystatechange = function (e) {  
								console.log( 'onreadystatechange' );

								if ( xhr.readyState === 4 ) {  
									if ( xhr.status === 200 ) {  
										console.log( xhr.responseText );  
									} 
									else {  
										console.log( "Error", xhr.statusText );  
							        }  
							    }  
							};
							xhr.addEventListener("load", function(e) {
								console.log( 'load' );
								// depois q fez o upload da photo, salva no banco as informações necessárias.
								// Photos.saveDB(form, 'save');
							}, false);							
							xhr.upload.addEventListener("progress", function(e) {
								console.log( 'progress' );
								// apenas uma barra de progresso... não é necessário. 
								// Photos.progress(e);
							}, false);						
							
							xhr.open("POST", 'upload.php', true);
							xhr.setRequestHeader("X-FILENAME", file.name);
							xhr.send( file );
						}
					};               		
               	}				

				return false;  
	        }  	
		});


NO PHP:

Upload em PHP, a pasta Photos deve estar criada. E dentro da pasta Photos criar a pasta Thumbs.

#Código
<?php

defined("DS") || define("DS", DIRECTORY_SEPARATOR);
defined("R" ) || define("R", dirname(__FILE__));

$photo_name = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false);

if ( $photo_name ) {
	// save photo
	file_put_contents('photos/' . $photo_name, file_get_contents('php://input'));
	
	// create photo
	// ************************************************
	$photo_dir = R . DS . "photos" . DS; 
	$new_width = 800;
		
	// ************************************************
	// load image and get image size
	$img 	= imagecreatefromjpeg( $photo_dir . $photo_name );
	$width 	= imagesx( $img );
	$height = imagesy( $img );
	
	// calculate photo size
	$new_height = floor( $height * ( $new_width / $width ) );
	
	// create a new temporary image
	$tmp_img = imagecreatetruecolor( $new_width, $new_height );
	  
	// copy and resize old image into new image
	imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
	  
	// save photo into a file
	imagejpeg( $tmp_img, $photo_dir . DS . $photo_name, 100 );

	// ************************************************
	// ************************************************
	// ************************************************
	// ************************************************
	// ************************************************
	
	// create Thumbs
	// ************************************************
	$photo_dir = R . DS . "photos" . DS; 
	$new_width = 300;
		
	// ************************************************
	// load image and get image size
	$img 	= imagecreatefromjpeg( $photo_dir . $photo_name );
	$width 	= imagesx( $img );
	$height = imagesy( $img );
	
	// calculate thumbnail size
	$new_height = floor( $height * ( $new_width / $width ) );
	
	// create a new temporary image
	$tmp_img = imagecreatetruecolor( $new_width, $new_height );
	  
	// copy and resize old image into new image
	imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
	  
	// save thumbnail into a file
	imagejpeg( $tmp_img, $photo_dir . 'thumbs' . DS . $photo_name );		

	echo true;
	exit;
}

echo false;
?>

Mateus
   - 05 ago 2014

Vou testar e Posto Resultados ;)