2012-09-01 23 views
12

que tiene varias imágenes - guarda como base 64 Cuerdas y ahora quiero cambiar el tamaño de estas imágenes para obtener imágenes en miniatura de ellos ...redimensionar imágenes base64

mejor sería usar Javascript (Nodo-Server) para cambiar el tamaño de ellos, pero también sería posible redimensionarlos con php.

Gracias de antemano

Respuesta

3

Ni idea de cómo hacer eso (o bien, cualquier cosa) en Node.js, pero el bit PHP de su pregunta es ciertamente posible. Después de analizar el Base64, cárguelo en un GD image y luego resample.

http://php.net/manual/en/function.imagecopyresampled.php

+0

así no tengo ni contra escritura derechos en mi servidor, ¿cómo podría vincular estos pulgares a mi aplicación node.js? ¿alguna idea? –

+0

Eso cae bajo el "No tengo idea de cómo hacer eso (o bueno, cualquier cosa) en node.js" un poco más arriba para mí, me temo. Alguien más podría tener una buena idea, con suerte. –

+0

buscando una respuesta para esto durante 2 días ... normalmente funcionaría bien con el nodo, pero en mi aplicación de nodo no tengo derechos de escritura, también ... eso apesta –

9

Estoy de acuerdo en the method from Jon Hanna: Hacer de análisis la Base64code luego cargarla a Imagen GD antes de volver a muestrear. Sin embargo, recuperarlo como datos no es tan fácil como creía. En php en GAE, necesitará enable output buffering configurando output_buffering = "On" en el archivo php.ini.

Aquí explico el paso en detalle.

Este documento se toma como referencia para crear una imagen Recursos mediante el análisis de Base64code: http://php.net/manual/en/function.imagecreatefromstring.php

// Create image resource from Base64code 
$data64 = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl' 
     . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr' 
     . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r' 
     . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg=='; 
$image = imagecreatefromstring(base64_decode($data64)); 

Este es un recurso de imagen que se puede poner directamente a la Resample función: http://php.net/manual/en/function.imagecopyresampled.php

// Resample 
$image_p = imagecreatetruecolor($new_w, $new_h); 
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_w, $new_h, $org_w, $org_h); 

El resultado es también un recurso de imagen. Para obtenerlo como datos, necesitamos Buffering.
Ver how to create a base64encoded string from image resource

// Buffering 
ob_start(); 
imagepng($image_p); 
$data = ob_get_contents(); 
ob_end_clean(); 

Usando doc continuación me puse un cubo GCS en my project como un sitio web de modo que pueda tienda & Display directamente: https://cloud.google.com/storage/docs/website-configuration#tips

//Store & Display 
$context = stream_context_create([ 
    'gs' =>[ 
     'acl'=> 'public-read', 
     'Content-Type' => 'image/jpeg', 
     'enable_cache' => true, 
     'enable_optimistic_cache' => true, 
     'read_cache_expiry_seconds' => 300, 
    ] 
]); 
file_put_contents("gs://mybucket/resample/image.jpeg", $data, false, $context); 
header("Location: http://mybucket/resample/image.jpeg"); 
+0

Vale la pena señalar también que 'imagecopyresampled()' produce una calidad mucho mejor que 'imagecopyresized()' porque interpola. – garrettlynch

Cuestiones relacionadas