Foros del Web » Programando para Internet » PHP »

Varias consultas

Estas en el tema de Varias consultas en el foro de PHP en Foros del Web. Buenas tardes , Bueno, tengo este código: Código: if($_GET['action'] == 'replace_all_with_watermark') { $images = opendir('images'); while($file = readdir($images)) { $file_extension = explode('.', $file); $file_extension = ...
  #1 (permalink)  
Antiguo 18/08/2015, 06:33
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años, 7 meses
Puntos: 1
Varias consultas

Buenas tardes ,

Bueno, tengo este código:

Código:
if($_GET['action'] == 'replace_all_with_watermark') {
		
		$images = opendir('images');
			
		while($file = readdir($images)) {
			
			$file_extension = explode('.', $file);
			
			$file_extension = $file_extension[1];
			
			$image_location = 'images/' . $file;
			
			if(preg_match('/(PNG|Png|pNg|pnG|png)/', $file_extension)) {
				
				$image = imagecreatefrompng($image_location);
				
			} else if(preg_match('/(GIF|Gif|gIf|giF|gif)/', $file_extension)) {
				
				$image = imagecreatefromgif($image_location);
				
			} else {
				
				$image = imagecreatefromjpeg($image_location);
				
			}
			
			$watermark = imagecreatefrompng('watermark.png');
			
			$watermark_margin_right = 40;
			
			$watermark_margin_bottom = 80;
			
			imagecopy($image, $watermark, imagesx($image) - imagesx($watermark) - $watermark_margin_right, imagesy($image) - imagesy($watermark) - $watermark_margin_bottom, 0, 0, imagesx($watermark), imagesy($watermark));
			
			if(preg_match('/(PNG|Png|pNg|pnG|png)/', $file_extension)) {
				
				imagepng($image, $image_location);
				
			} else if(preg_match('/(GIF|Gif|gIf|giF|gif)/', $file_extension)) {
				
				imagegif($image, $image_location);
				
			} else {
				
				imagejpeg($image, $image_location, 100);
				
			}
			
		}
		
		closedir($images);
	
	}
Pues la cosa es que tengo un index.php y ahí este código, en ese if un else en el que le pongo un botón con get para que se ejecute y bueno, básicamente lo que quiero conseguir es que este código coja todas las fotos de la carpeta images y les añada la marca de agua. Pero me da error, concretamente me dice esto:

Código:
Warning: imagecreatefromjpeg(images/.): failed to open stream: Permission denied in C:\xampp\htdocs\prueba_pedro\index.php on line 165

Warning: imagesx() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\prueba_pedro\index.php on line 175

Warning: imagesy() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\prueba_pedro\index.php on line 175

Warning: imagecopy() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\prueba_pedro\index.php on line 175

Warning: imagejpeg() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\prueba_pedro\index.php on line 187

Warning: imagecreatefromjpeg(images/..): failed to open stream: Permission denied in C:\xampp\htdocs\prueba_pedro\index.php on line 165

Warning: imagesx() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\prueba_pedro\index.php on line 175

Warning: imagesy() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\prueba_pedro\index.php on line 175

Warning: imagecopy() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\prueba_pedro\index.php on line 175

Warning: imagejpeg() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\prueba_pedro\index.php on line 187
¡Muchísimas gracias! :)
  #2 (permalink)  
Antiguo 18/08/2015, 07:19
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Varias consultas

Pues los errores te indican que tratas de abrir rutas que no son válidas: images/. e images/.. ¿o son correctas?

Por favor, depura tu código e inspecciona si tus variables contienen lo que deberían.

No podemos ejecutar tu código mentalmente para saber.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 18/08/2015, 08:08
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Varias consultas

¡Hola pateketrueke! ,

Entonces falla el while :/ ¿Hay alguna otra manera de hacer lo mismo? Es decir, obtener el nombre de todas las imágenes del directorio.

Muchas gracias :)
  #4 (permalink)  
Antiguo 18/08/2015, 10:14
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Varias consultas

De hecho la forma es correcto, lo que te hace falta es leer el manual.

¿Por qué?

Porque readdir() no sólo devuelve los nombres de los archivos, así que debes corregir tu lógica.

Además sólo devuelve los nombres y no las rutas completas.

En fin, te falta mucho por leer.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 18/08/2015, 11:28
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Varias consultas

¡Muchas gracias pateketrueke!

Pero he encontrado este método:

Código:
foreach(new DirectoryIterator('images/') as $file) {
			
			if($file->isDot()) continue;
			
			$file = $file->getFilename();
}
Me va de perlas XD, por cierto, tengo un pequeño problema y es que claro, tengo muchas imágenes de distintos tamaños que paso por el php y normalmente uso imagenes de gran tamaño comparadas con la marca de agua, pero hay algunas que son más pequeñas que la marca, y claro, no se ve bien y se desencaja, dejo la parte de cuando añado la marca aunque es más un logotipo XD:

Código:
$watermark = imagecreatefrompng('watermark.png');
			
			if(imagesx($image) >= imagesy($image)) {
			
				$watermark_margin_right = 40;
			
				$watermark_margin_bottom = 80;
			
				imagecopy($image, $watermark, imagesx($image) - imagesx($watermark) - $watermark_margin_right, imagesy($image) - imagesy($watermark) - $watermark_margin_bottom, 0, 0, imagesx($watermark), imagesy($watermark));
			
			} else {
				
				$watermark_margin_right = 20;
			
				$watermark_margin_bottom = 25;
				
				$split_size = 4;
			
				imagecopyresized($image, $watermark, imagesx($image) - imagesx($watermark) / $split_size - $watermark_margin_right, imagesy($image) - imagesy($watermark) / $split_size - $watermark_margin_bottom, 0, 0, imagesx($watermark) / $split_size, imagesy($watermark) / $split_size, imagesx($watermark), imagesy($watermark));
				
			}
¿Hay alguna manera que vaya en proporcion con la imagen o algo para que mantenga el mismo tamaño con todas las imágenes a simple vista?.

Muchas gracias :)

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:09.