subir script redimensionar recortar para imagenes imagen con php gd crop

recortar - script para redimensionar imagenes en php



Recortar imagen en PHP (7)

¿Hay alguna forma de ''alejar la imagen''?

Para un enfoque de servidor / PHP menor, aquí hay un buen plugin jQuery .

Uno podría hacer todos los ajustes necesarios ( el zoom y la relación de aspecto, tipo ) en el lado del cliente y enviar las posiciones y el tamaño del área final recortada al lado del servidor para su manipulación y almacenamiento final. Los docs dicen que es bastante para que te muevas.

El código siguiente recorta bien la imagen, que es lo que quiero, pero para imágenes más grandes, tampoco funciona. ¿Hay alguna forma de ''alejar la imagen''?

Idealmente, podría tener cada imagen más o menos del mismo tamaño antes de cortar para que obtuviera buenos resultados cada vez

El código es

<?php $image = $_GET[''src'']; // the image to crop $dest_image = ''images/cropped_whatever.jpg''; // make sure the directory is writeable $img = imagecreatetruecolor(''200'',''150''); $org_img = imagecreatefromjpeg($image); $ims = getimagesize($image); imagecopy($img,$org_img, 0, 0, 20, 20, 200, 150); imagejpeg($img,$dest_image,90); imagedestroy($img); echo ''<img src="''.$dest_image.''" ><p>'';


Código HTML:-

enter code here <!DOCTYPE html> <html> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> Select image to upload: <input type="file" name="image" id="fileToUpload"> <input type="submit" value="Upload Image" name="submit"> </form> </body> </html>

upload.php

enter code here <?php $image = $_FILES; $NewImageName = rand(4,10000)."-". $image[''image''][''name'']; $destination = realpath(''../images/testing'').''/''; move_uploaded_file($image[''image''][''tmp_name''], $destination.$NewImageName); $image = imagecreatefromjpeg($destination.$NewImageName); $filename = $destination.$NewImageName; $thumb_width = 200; $thumb_height = 150; $width = imagesx($image); $height = imagesy($image); $original_aspect = $width / $height; $thumb_aspect = $thumb_width / $thumb_height; if ( $original_aspect >= $thumb_aspect ) { // If image is wider than thumbnail (in aspect ratio sense) $new_height = $thumb_height; $new_width = $width / ($height / $thumb_height); } else { // If the thumbnail is wider than the image $new_width = $thumb_width; $new_height = $height / ($width / $thumb_width); } $thumb = imagecreatetruecolor( $thumb_width, $thumb_height ); // Resize and crop imagecopyresampled($thumb, $image, 0 - ($new_width - $thumb_width) / 2, // Center the image horizontally 0 - ($new_height - $thumb_height) / 2, // Center the image vertically 0, 0, $new_width, $new_height, $width, $height); imagejpeg($thumb, $filename, 80); echo "cropped"; die; ?>


Si intenta generar miniaturas, primero debe cambiar el tamaño de la imagen usando imagecopyresampled(); . Debe cambiar el tamaño de la imagen para que el tamaño del lado más pequeño de la imagen sea igual al lado correspondiente del pulgar.

Por ejemplo, si su imagen de origen es 1280x800px y su pulgar es 200x150px, debe cambiar el tamaño de su imagen a 240x150px y luego recortarla a 200x150px. Esto es para que la relación de aspecto de la imagen no cambie.

Aquí hay una fórmula general para crear miniaturas:

$image = imagecreatefromjpeg($_GET[''src'']); $filename = ''images/cropped_whatever.jpg''; $thumb_width = 200; $thumb_height = 150; $width = imagesx($image); $height = imagesy($image); $original_aspect = $width / $height; $thumb_aspect = $thumb_width / $thumb_height; if ( $original_aspect >= $thumb_aspect ) { // If image is wider than thumbnail (in aspect ratio sense) $new_height = $thumb_height; $new_width = $width / ($height / $thumb_height); } else { // If the thumbnail is wider than the image $new_width = $thumb_width; $new_height = $height / ($width / $thumb_width); } $thumb = imagecreatetruecolor( $thumb_width, $thumb_height ); // Resize and crop imagecopyresampled($thumb, $image, 0 - ($new_width - $thumb_width) / 2, // Center the image horizontally 0 - ($new_height - $thumb_height) / 2, // Center the image vertically 0, 0, $new_width, $new_height, $width, $height); imagejpeg($thumb, $filename, 80);

No lo he probado pero debería funcionar.

EDITAR

Ahora probado y funcionando.



imagecopyresampled() tomará un área rectangular de $src_image de ancho $src_w y height $src_h en la posición ($src_x, $src_y) y lo colocará en un área rectangular de $dst_image de ancho $dst_w y height $dst_h en posición ($dst_x, $dst_y) .

Si las coordenadas de origen y destino y el ancho y las alturas difieren, se realizará un estiramiento o una contracción apropiados del fragmento de imagen. Las coordenadas se refieren a la esquina superior izquierda.

Esta función se puede usar para copiar regiones dentro de la misma imagen. Pero si las regiones se superponen, los resultados serán impredecibles.

- Editar -

Si $src_w y $src_h son más pequeños que $dst_w y $dst_h respectivamente, la imagen del pulgar se $dst_h . De lo contrario, se $dst_h .

<?php $dst_x = 0; // X-coordinate of destination point $dst_y = 0; // Y-coordinate of destination point $src_x = 100; // Crop Start X position in original image $src_y = 100; // Crop Srart Y position in original image $dst_w = 160; // Thumb width $dst_h = 120; // Thumb height $src_w = 260; // Crop end X position in original image $src_h = 220; // Crop end Y position in original image // Creating an image with true colors having thumb dimensions (to merge with the original image) $dst_image = imagecreatetruecolor($dst_w, $dst_h); // Get original image $src_image = imagecreatefromjpeg(''images/source.jpg''); // Cropping imagecopyresampled($dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h); // Saving imagejpeg($dst_image, ''images/crop.jpg''); ?>


$image = imagecreatefromjpeg($_GET[''src'']); $filename = ''images/cropped_whatever.jpg''

Debe ser reemplazado por:

$image = imagecreatefromjpeg($_GET[''src'']);

¡Entonces funcionará!


$image = imagecreatefromjpeg($_GET[''src'']);

Necesita ser reemplazado con esto:

$image = imagecreatefromjpeg(''images/thumbnails/myimage.jpg'');

Porque imagecreatefromjpeg() espera una cadena.
Esto funcionó para mí.

árbitro:
http://php.net/manual/en/function.imagecreatefromjpeg.php