{"id":2229,"date":"2010-08-25T09:30:13","date_gmt":"2010-08-25T07:30:13","guid":{"rendered":"http:\/\/bitacora.eniac2000.com\/?p=2229"},"modified":"2010-08-25T09:30:13","modified_gmt":"2010-08-25T07:30:13","slug":"correccion-de-error-en-mostrado-panoramicas-con-wordpress-y-gallery2","status":"publish","type":"post","link":"https:\/\/bitacora.eniac2000.com\/?p=2229","title":{"rendered":"Correcci\u00f3n de error en mostrado panor\u00e1micas con WordPress y Gallery2"},"content":{"rendered":"<p>El sistema que utilizo para publicar este sitio web es el siguiente: se utiliza como base el gestor de contenidos <a href=\"http:\/\/www.wordpress.org\">WordPress<\/a>, complementado con algunas soluciones perif\u00e9ricas. La principal de ellas es la integraci\u00f3n con el sistema de gesti\u00f3n de galer\u00edas fotogr\u00e1ficas <a href=\"http:\/\/gallery.menalto.com\/\">Gallery2<\/a>, que se realiza mediante un plugin dise\u00f1ado al efecto: <a href=\"http:\/\/codex.gallery2.org\/Integration:WPG2\">WPG2<\/a>.<\/p>\n<p>No todas las fotograf\u00edas que publico son gestionadas mediante Gallery2. Para fotograf\u00edas sueltas utilizo el propio sistema de WordPress, pero cuando inserto referencias a una serie fotogr\u00e1fica (correspondiente a alg\u00fan viaje o evento concreto) s\u00ed que suelo utilizar Gallery2. El sistema es bastante simple: una vez subidas las fotograf\u00edas a Gallery2 y catalogadas por \u00e9ste, desde WordPress s\u00f3lo es necesario hacer referencia al identificador de la imagen mediante la etiqueta <em>&lt;wpg2id&gt;<\/em> para insertar la imagen en la entrada. Con esta referencia, el art\u00edculo muestra una versi\u00f3n reducida de la imagen, y un enlace a la imagen original dentro de la estructura de la galer\u00eda de im\u00e1genes, adaptada para su visualizaci\u00f3n en WordPress,<\/p>\n<p>Por lo general, el sistema funciona bastante bien. Sin embargo, desde hac\u00eda tiempo hab\u00eda observado un problema con las im\u00e1genes panor\u00e1micas, en las que existe una gran diferencia entre el ancho y el alto de la imagen: cuando insertaba una imagen mediante el sistema explicado anteriormente, en el caso de las fotograf\u00edas panor\u00e1micas no se mostraba la miniatura de la imagen, sino la imagen completa, pero escalada al tama\u00f1o de la miniatura definida. Los problemas que esto provoca, especialmente en tiempo de carga, eran significativos, ya que algunas de las panor\u00e1micas pueden alcanzar tama\u00f1os de m\u00e1s de 10000&#215;2000 p\u00edxels, y <em>pesos<\/em> superiores a los 10 MB, mientras que las miniaturas asociadas tienen unas dimensiones m\u00e1ximas de 400 p\u00edxels en su lado m\u00e1s grande, y pesos inferiores a los 30 KB.<\/p>\n<p>Tras un tiempo de investigaci\u00f3n, he conseguido dar con una soluci\u00f3n al problema, en los foros de Gallery: <a href=\"http:\/\/gallery.menalto.com\/node\/73336\">&lt;wpg2&gt; tags use always full-size versions<\/a> En una de las entradas, uno de los usuarios informa de que el problema se debe al m\u00e9todo en el que el sistema estudia si ha de escoger mostrar una miniatura o la versi\u00f3n completa de la imagen, aunque escalada. Para determinar esto el sistema compara el ancho y el alto de la imagen. Esta comparaci\u00f3n, si bien resulta adecuada para la mayor\u00eda de las im\u00e1genes, produce problemas en aquellas con importantes diferencias entre ancho y alto, como es el caso de las panor\u00e1micas. Ante ello, el usuario propone hacer uso s\u00f3lo del ancho. Para ello, es necesario realizar modificaciones en el archivo <em>ImageBlockHelper.class<\/em>, ubicada en el directorio <em>\/modules\/imageblock\/classes<\/em> de Gallery2 (en mi caso, al usar el paquete Debian, su ruta completa es <em>\/usr\/share\/gallery2\/modules\/imageblock\/classes<\/em>). En concreto, es necesario realizar unas modificaciones a partir de la l\u00ednea 424 del archivo:<\/p>\n<p><code>\/* Get the list of resizes *\/<br \/>\n$resizes = array();<br \/>\nlist ($ret, $ok) = GalleryCoreApi::hasItemPermission(<br \/>\n$derivativeParentId, 'core.viewResizes', $userId);<br \/>\nif ($ret) {<br \/>\nreturn array($ret, null);<br \/>\n}<br \/>\nif ($ok) {<br \/>\nlist ($ret, $resizes) =<br \/>\nGalleryCoreApi::fetchResizesByItemIds(array($derivativeParentId));<br \/>\nif ($ret) {<br \/>\nreturn array($ret, null);<br \/>\n}<br \/>\n$resizes = isset($resizes[$derivativeParentId]) ? $resizes[$derivativeParentId]<br \/>\n: array();<br \/>\n}<br \/>\nif (isset($thumbnail)) {<br \/>\n$resizes[] = $thumbnail;<br \/>\n}<br \/>\nforeach ($resizes as $imageObject) {<br \/>\n<strong>\/*Primera modificacion*\/<br \/>\n\/*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $rawDifferential = ($imageObject-&gt;getHeight() - $maxSize)<br \/>\n+ ($imageObject-&gt;getWidth() - $maxSize);*\/<br \/>\n$rawDifferential = ($imageObject-&gt;getWidth() - $maxSize);<\/strong><br \/>\nif ($biggerOnly &amp;&amp; $rawDifferential &lt; 0) {<br \/>\ncontinue;<br \/>\n}<br \/>\n$resizeDifferential = abs($rawDifferential);<br \/>\n\/*Segunda modificacion*\/<br \/>\n<strong>\/*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 $resizeSize = $imageObject-&gt;getHeight() * $imageObject-&gt;getWidth();*\/<br \/>\n$resizeSize = $imageObject-&gt;getWidth();<\/strong><br \/>\n\/*<br \/>\n* If this differential is smaller than the last, update the image target and<br \/>\n* the comparison value.<br \/>\n* If two differentials are equidistant, use the larger based on image size.<br \/>\n*\/<br \/>\nif ($resizeDifferential &lt; $imageDifferential<br \/>\n|| $resizeDifferential == $imageDifferential<br \/>\n&amp;&amp; $resizeSize &gt; $imageSize) {<br \/>\n$image = $imageObject;<br \/>\n$imageDifferential = $resizeDifferential;<br \/>\n$imageSize = $resizeSize;<br \/>\n}<br \/>\n}<br \/>\n}<\/code><\/p>\n<p>Una vez hecho esto, en WordPress se empezar\u00e1n a mostrar correctamente las miniaturas de las im\u00e1genes en vez de las versiones escaladas de las im\u00e1genes completas, en el caso de las panor\u00e1micas.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>El sistema que utilizo para publicar este sitio web es<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[13],"tags":[517,712,1229,1794,1795],"series":[],"class_list":["post-2229","post","type-post","status-publish","format-standard","hentry","category-informatica","tag-debian","tag-gallery2","tag-panoramica","tag-wordpress","tag-wpg2"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/2229","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2229"}],"version-history":[{"count":0,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/2229\/revisions"}],"wp:attachment":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2229"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2229"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2229"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fseries&post=2229"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}