Problemas con la resolución de imágenes en k2 joomla 3.5

Porblemas resolucion k2

Uno de mis clientes tiene una web en la que la gestión de artículos e imágenes está realizada en k2. Existía un problema con la resolución de las imágenes ya que k2 crea en una carpeta items/k2/cache las imágenes con diferentes tamaños y resoluciones pero nunca como la original. 

La solución que le dimos fue la siguiente:

En primer lugar decidimos intentar cambiar la dirección desde donde mostraba k2 las imagenes. Hay que saber que k2 al subir una imagen para el articulo, crea 6 imágenes en caché diferente además de guardar la original. 

1º Las imágenes con diferentes tamaños:

La ruta de acceso es /media/k2/items/cache/.

Los nombres de las imagenes son el mismo del archivo original codificado em md5 + una cadena con la que dice su tamaño. _XS _S _M _L _XL _Generic

2º La imagen orginal:

La ruta de acceeso es /media/k2/items/src.

El nombre de la imagen es el mismo del original pero codificado en md5.

 

Opción 1

Importante, deberéis de ejecutar si el número de imagenes es muy grande , el codigo php desde ssh en el servidor, sino se os pillará.

El codigo no es mio pero lo he modificado un poco para que solo salgan las imágenes con la terminación en _L.jpg que es la que usaba mi cliente.

Los pasos son:

Primero copiar este archivo como rebuild.php en el servidor, copiad el código de mas abajo. Ponéis el archivo en la ruta /media/k2/items de vuestro ftp.

Segundo chequeáis las variables. En este caso he puesto que no haga resize y que la calidad sea 100%.

Tercero ejecutarlo. Comprobad si se han ejecutado muchas, si tienees el execution time etc bajos, no lo hará todo. Es posble que hasta te de error 500 de denegación de servicio ... por eso lo de ejecutarlo desde el servidor.  

Si tenéis alguna duda más preguntadme.

 

Si queréis el código original está aqui https://github.com/rdeutz/rebuildK2imageCache El código original creará todas las imágenes de nuevo en caché con todos los tamaños segun la calidad que tu le quieras poner. Esto es bueno por ejemplo para webs muy pesadas que quieras tener una copia de seguirdad o incluso para cambiar la resolucion segun convenga. Tened en cuenta lo que comenté antes de hacerlo desde ssh en el servidor puesto que si lo haces desde el explorador seguramente no lo concluya ....

 

 

 

Opción 2

La opcion 2 seguramente sea hasta mas fácil, pero implica que tengas acceso a tu vps por lo que en un hosting compartido no podrás. Si tu caso es el uso de hostiing compartido pero tienes en tu pc un wamp o un linux puedes crearlo en tu pc y luego subirlo a la carpeta /k2/items/cache

 Básicamente sería crear un script bash que hiciese una copia de lo que hay en carpeta /k2/items/src y lo copiase en /k2/items/src + la extension _L.jpg o la que pille vuestro k2.

 

<?php
/**
* How to use:
*
* 1) Copy this file as rebuild.php into "JPATH_ROOT/media/k2/items"
* 2) Check Variables, use a size of 0 for not processing this image size
* 3) run it "php -f rebuild.php" (it overwrites existing files without notice)
*
*/
// Variabels
$sizeG = 300;
$sizeL = 600;
$sizeM = 300;
$sizeS = 200;
$sizeXL = 900;
$sizeXS = 100;
$jpeg_quality = 100;
/**
* DO NOT CHANGE ANYTHING AFTER THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING!
*/
$uploadclassfile = dirname(__FILE__).'/../../../administrator/components/com_k2/lib/class.upload.php';
if(!file_exists($uploadclassfile))
{
echo "Can't find class.upload.php! Is K2 installed? Did you copy rebuild.php to the right directory?";
}
define('_JEXEC',1);
require_once ($uploadclassfile);
// dirs
$sourcedir = dirname(__FILE__).'/src';
$targetdir = dirname(__FILE__).'/cache/';
$sizes = array('Generic' => $sizeG);
if ($fhandle = opendir($sourcedir)) {
while (false !== ($entry = readdir($fhandle)))
{
$file = $sourcedir.'/'.$entry;
if (is_file($file))
{
echo '.';
$r = buildImages($file, $targetdir, $sizes, $jpeg_quality);
if ($r === true)
{
echo "File: ".$entry . " SUCCESSFUL\n";
}
else
{
echo "File: ".$entry . " FAIL\n";
echo "Details:\n";
foreach($sizes AS $key => $value)
{
$result = 'Success';
if (array_key_exists($key, $r))
{
$result = 'Failed';
}
echo "Size $key ($value px): ".$result."\n";
}
}
}
}
closedir($fhandle);
}
function buildImages($sourcefile, $targetdir, $sizes, $jpeg_quality=90)
{
$resultsummery = true;
foreach($sizes AS $key => $value)
{
if ($value != 0)
{
$filename = basename($sourcefile,'.jpg');
$targetfile = $targetdir.'/'.$filename.'_L.jpg';
if (buildImage($sourcefile, $targetfile, $value) !== true)
{
// Successful
$resultdetails[$key] = true;
}
else
{
// Failed
$resultsummery = false;
$resultdetails[$key] = false;
}
}
}
return $resultsummery ? true : $resultdetails;
}
function buildImage($sourcefile, $targetfile, $size, $jpeg_quality=90)
{
$handle = new Upload($sourcefile);
$savepath = dirname($targetfile);
$handle->image_resize = false;
$handle->image_ratio_y = false;
$handle->image_convert = 'jpg';
$handle->jpeg_quality = $jpeg_quality;
$handle->file_auto_rename = false;
$handle->file_overwrite = true;
$handle->file_new_name_body = basename($targetfile,'.jpg');
$handle->image_x = (int) $size;
return $handle->Process($savepath);
}