Recursos Web - Avatares phpBB3
MensajePublicado:16 Nov 2015 07:54
Como apertura de esta sección de temas, he decidido poner el código utilizado para redimensionar los avatares en este tipo de foro, phpbb3.
De una forma más detallada podría decir, que la siguiente modificación permite a los usuarios subir un avatar del ancho y alto que ellos quieran y este, automáticamente, será autoredimensionado. Por alguna extraña razón, los desarrolladores de phpBB nunca añadieron esta función, lo cuál es sorprendente, ya que escribieron la mayor parte del código.
Bueno, adelante con el procedimiento. Primero, abrir el archivo: includes/functions_posting.php y localizar create_thumbnail. La función empieza con este código:
Por otra parte, redimensionar las imágenes es un proceso intensivo, normalmente por eso suele estar limitado. Si la gente tiene problemas a la hora de cambiar el avatar con pantallas en blanco puede ser por el tamaño de los archivos, habrá que ir al panel ACP y en general>avatar puedes cambiar el tamaño a 262144 bytes. Esto es todo, cualquier duda ya sabéis, preguntad
De una forma más detallada podría decir, que la siguiente modificación permite a los usuarios subir un avatar del ancho y alto que ellos quieran y este, automáticamente, será autoredimensionado. Por alguna extraña razón, los desarrolladores de phpBB nunca añadieron esta función, lo cuál es sorprendente, ya que escribieron la mayor parte del código.
Bueno, adelante con el procedimiento. Primero, abrir el archivo: includes/functions_posting.php y localizar create_thumbnail. La función empieza con este código:
Código: Seleccionar todo
y termina con este otro código
/**
* Create Thumbnail
*/
function create_thumbnail($source, $destination, $mimetype)
{
Código: Seleccionar todo
Remplazar la función entera con el siguiente código:
if (!file_exists($destination))
{
return false;
}
phpbb_chmod($destination, CHMOD_READ | CHMOD_WRITE);
return true;
}
Código: Seleccionar todo
Guarda el archivo. Ahora abre includes/functions_user.php y encuentra el siguiente código:
/**
* Create Thumbnail
*/
function create_thumbnail($source, $destination, $mimetype, $new_width=0, $new_height=0) {
global $config;
if ($new_width == 0) {
$min_filesize = (int) $config['img_min_thumb_filesize'];
$img_filesize = (file_exists($source)) ? @filesize($source) : false;
if (!$img_filesize || $img_filesize <= $min_filesize) {
return false;
}
}
else {
$destination = $source;
}
$dimension = @getimagesize($source);
if ($dimension === false) {
return false;
}
list($width, $height, $type, ) = $dimension;
if (empty($width) || empty($height)) {
return false;
}
if ($new_width == 0) {
list($new_width, $new_height) = get_img_size_format($width, $height);
}
else if ($height > $new_height || $width > $new_width) {
$h_ratio = $new_height / $height;
$w_ratio = $new_width / $width;
$scale_factor = ($h_ratio < $w_ratio) ? $h_ratio : $w_ratio;
$new_width = ($h_ratio < $w_ratio) ? round($width * $scale_factor) : $new_width;
$new_height = ($w_ratio < $h_ratio) ? round($height * $scale_factor) : $new_height;
}
else {
return false;
}
// Do not create a thumbnail if the resulting width/height is bigger than the original one
if ($new_width >= $width && $new_height >= $height) {
return false;
}
$used_imagick = false;
// Only use imagemagick if defined and the passthru function not disabled
if ($config['img_imagick'] && function_exists('passthru')) {
if (substr($config['img_imagick'], -1) !== '/') {
$config['img_imagick'] .= '/';
}
@passthru(escapeshellcmd($config['img_imagick']) . 'convert' . ((defined('PHP_OS') && preg_match('#^win#i', PHP_OS)) ? '.exe' : '') . ' -quality 85 -geometry ' . $new_width . 'x' . $new_height . ' "' . str_replace('\\', '/', $source) . '" "' . str_replace('\\', '/', $destination) . '"');
if (file_exists($destination)) {
$used_imagick = true;
}
}
if (!$used_imagick) {
$type = get_supported_image_types($type);
if ($type['gd']) {
// If the type is not supported, we are not able to create a thumbnail
if ($type['format'] === false) {
return false;
}
switch ($type['format']) {
case IMG_GIF:
$image = @imagecreatefromgif($source);
break;
case IMG_JPG:
@ini_set('gd.jpeg_ignore_warning', 1);
$image = @imagecreatefromjpeg($source);
break;
case IMG_PNG:
$image = @imagecreatefrompng($source);
break;
case IMG_WBMP:
$image = @imagecreatefromwbmp($source);
break;
}
if (empty($image)) {
return false;
}
if ($type['version'] == 1) {
$new_image = imagecreate($new_width, $new_height);
if ($new_image === false) {
return false;
}
imagecopyresized($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
}
else {
$new_image = imagecreatetruecolor($new_width, $new_height);
if ($new_image === false) {
return false;
}
// Preserve alpha transparency (png for example)
@imagealphablending($new_image, false);
@imagesavealpha($new_image, true);
imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
}
// If we are in safe mode create the destination file prior to using the gd functions to circumvent a PHP bug
if (@ini_get('safe_mode') || @strtolower(ini_get('safe_mode')) == 'on') {
@touch($destination);
}
switch ($type['format']) {
case IMG_GIF:
imagegif($new_image, $destination);
break;
case IMG_JPG:
imagejpeg($new_image, $destination, 90);
break;
case IMG_PNG:
imagepng($new_image, $destination);
break;
case IMG_WBMP:
imagewbmp($new_image, $destination);
break;
}
imagedestroy($new_image);
}
else {
return false;
}
}
if (!file_exists($destination)) {
return false;
}
phpbb_chmod($destination, CHMOD_READ | CHMOD_WRITE);
return array($new_width, $new_height);
}
Código: Seleccionar todo
Remplaza el código con esto:
$prefix = $config['avatar_salt'] . '_';
$file->clean_filename('avatar', $prefix, $data['user_id']);
Código: Seleccionar todo
¡Y esto es todo! Cabe recalcar que lo ideal sería hacerlo con notepad++ (por supuesto) y hacer una copia de seguridad de estos dos archivos. $prefix = $config['avatar_salt'] . '_';
// MODIFICATION BY INDIFERENTEJACK
// resize uploaded avatar
include_once($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
@ini_set('memory_limit','128M');
$result = create_thumbnail($file->get('filename'), '', '', $config['avatar_max_width'], $config['avatar_max_height']);
if ($result) {
list($file->width, $file->height) = $result;
}
// END MODIFICATION
$file->clean_filename('avatar', $prefix, $data['user_id']);
Por otra parte, redimensionar las imágenes es un proceso intensivo, normalmente por eso suele estar limitado. Si la gente tiene problemas a la hora de cambiar el avatar con pantallas en blanco puede ser por el tamaño de los archivos, habrá que ir al panel ACP y en general>avatar puedes cambiar el tamaño a 262144 bytes. Esto es todo, cualquier duda ya sabéis, preguntad