<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Dear Omero Developers,<div><br></div><div>I am trying to use OMERO Web to visualise image thumbnails of any slice (z,t) and supporting rendering parameters as well, concretely those related with the contrast (?c=1|-3000,3000).</div><div>So far I managed to add a new django web service to OMERO Web.</div><div>This new view is able to render these down-sampled versions of the images at any Z and T (this option was already implemented in OMERO Py omero.gateway package in the <span style="font-family: Monaco; font-size: 11px;">getThumbnail() function</span>, but not accessible from OMERO Web).</div><div>The new view is also capable of using the webgateway_cache to store the files using setImage() and getImage() with a special ctx string that is added to the image id.</div><div><br></div><div>However, for the EMPIAR 3D viewer I need also to set the contrast of the down-sampled images, so I would need support for (?c=1|-3000,3000) parameters to adjust the contrast of the thumbnail.</div><div><br></div><div>If you could provide some feedback on OMERO PY omero.gateway package I would appreciate it. I am digging in the getThumbnail(), _prepareTB() and renderJpeg(). I think that _prepareTB is resetting the context parameters but I am not sure about this.</div><div><br></div><div>So far this is the code for the new OMERO Web Call:</div><div><br></div><div><br></div><div><div style="margin: 0px; font-size: 11px; font-family: Monaco; color: rgb(144, 144, 144);">@login_required<span style="color: #000000">()</span></div><div style="margin: 0px; font-size: 11px; font-family: Monaco;"><span style="color: #0433ff">def</span> render_slice_thumbnail (request, iid, z, t, w=<span style="color: #0433ff">None</span>, h=<span style="color: #0433ff">None</span>, conn=<span style="color: #0433ff">None</span>, _defcb=<span style="color: #0433ff">None</span>, **kwargs):</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">    <span style="color: #00b400">"""</span></div><div style="margin: 0px; font-size: 11px; font-family: Monaco; color: rgb(0, 180, 0);">    Returns an HttpResponse wrapped jpeg with the rendered thumbnail for image 'iid'</div><div style="margin: 0px; font-size: 11px; font-family: Monaco; min-height: 15px;"><br></div><div style="margin: 0px; font-size: 11px; font-family: Monaco; color: rgb(0, 180, 0);">    @param request:     http request</div><div style="margin: 0px; font-size: 11px; font-family: Monaco; color: rgb(0, 180, 0);">    @param iid:         Image ID</div><div style="margin: 0px; font-size: 11px; font-family: Monaco; color: rgb(0, 180, 0);">    @param z:           Z index</div><div style="margin: 0px; font-size: 11px; font-family: Monaco; color: rgb(0, 180, 0);">    @param t:           T index</div><div style="margin: 0px; font-size: 11px; font-family: Monaco; color: rgb(0, 180, 0);">    @param w:           Thumbnail max width. 64 by default</div><div style="margin: 0px; font-size: 11px; font-family: Monaco; color: rgb(0, 180, 0);">    @param h:           Thumbnail max height</div><div style="margin: 0px; font-size: 11px; font-family: Monaco; color: rgb(0, 180, 0);">    @return:            http response containing jpeg</div><div style="margin: 0px; font-size: 11px; font-family: Monaco; color: rgb(0, 180, 0);">    """</div><div style="margin: 0px; font-size: 11px; font-family: Monaco; min-height: 15px;"><br></div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">    server_id = request.session[<span style="color: #00b400">'connector'</span>].server_id</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">    direct = <span style="color: #0433ff">True</span></div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">    <span style="color: #0433ff">if</span> w <span style="color: #0433ff">is</span> <span style="color: #0433ff">None</span>:</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">        size = (<span style="color: #941100">64</span>,)</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">    <span style="color: #0433ff">else</span>:</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">        <span style="color: #0433ff">if</span> h <span style="color: #0433ff">is</span> <span style="color: #0433ff">None</span>:</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">            size = (int(w),)</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">        <span style="color: #0433ff">else</span>:</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">            size = (int(w), int(h))</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">    <span style="color: #0433ff">if</span> size == (<span style="color: #941100">96</span>,):</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">        direct = <span style="color: #0433ff">False</span></div><p style="margin: 0px; font-size: 11px; font-family: Monaco; min-height: 15px;">        <br class="webkit-block-placeholder"></p><div style="margin: 0px; font-size: 11px; font-family: Monaco;">    pi = _get_prepared_image(request, iid, server_id=server_id, conn=conn)</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">    <span style="color: #0433ff">if</span> pi <span style="color: #0433ff">is</span> <span style="color: #0433ff">None</span>:</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">        <span style="color: #0433ff">raise</span> Http404</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">    img, compress_quality = pi</div><p style="margin: 0px; font-size: 11px; font-family: Monaco; min-height: 15px;">    <br class="webkit-block-placeholder"></p><div style="margin: 0px; font-size: 11px; font-family: Monaco;">    rdefId = request.REQUEST.get(<span style="color: #00b400">'rdefId'</span>, <span style="color: #0433ff">None</span>)</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">    <span style="color: #0433ff">if</span> rdefId <span style="color: #0433ff">is</span> <span style="color: #0433ff">not</span> <span style="color: #0433ff">None</span>:</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">        rdefId = int(rdefId)</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;"><br></div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">    jpeg_data = webgateway_cache.getImage(request, server_id, img, z, t, ctx=<span style="color: #00b400">'thumbslice'</span> + w + <span style="color: #00b400">'x'</span> + h)</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">    <span style="color: #0433ff">if</span> jpeg_data <span style="color: #0433ff">is</span> <span style="color: #0433ff">None</span>:</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">        prevent_cache = <span style="color: #0433ff">False</span></div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">        img = conn.getObject(<span style="color: #00b400">"Image"</span>, iid)</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">        <span style="color: #0433ff">if</span> img <span style="color: #0433ff">is</span> <span style="color: #0433ff">None</span>:</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">            logger.debug(<span style="color: #00b400">"(b)Image %s not found..."</span> % (str(iid)))</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">            <span style="color: #0433ff">if</span> _defcb:</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">                jpeg_data = _defcb(size=size)</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">                prevent_cache = <span style="color: #0433ff">True</span></div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">            <span style="color: #0433ff">else</span>:</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">                <span style="color: #0433ff">raise</span> Http404</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">        <span style="color: #0433ff">else</span>:</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">            jpeg_data = img.getThumbnail(size=size, z=int(z), t=int(t), direct=direct, rdefId=rdefId)</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">            <span style="color: #0433ff">if</span> jpeg_data <span style="color: #0433ff">is</span> <span style="color: #0433ff">None</span>:</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">                logger.debug(<span style="color: #00b400">"(c)Image %s not found..."</span> % (str(iid)))</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">                <span style="color: #0433ff">if</span> _defcb:</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">                    jpeg_data = _defcb(size=size)</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">                    prevent_cache = <span style="color: #0433ff">True</span></div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">                <span style="color: #0433ff">else</span>:</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">                    <span style="color: #0433ff">return</span> HttpResponseServerError(<span style="color: #00b400">'Failed to render thumbnail'</span>)</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">            <span style="color: #0433ff">else</span>:</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">                prevent_cache = img._thumbInProgress</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">        <span style="color: #0433ff">if</span> <span style="color: #0433ff">not</span> prevent_cache:</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">            webgateway_cache.setImage(request, server_id, img, z, t, jpeg_data, ctx=<span style="color: #00b400">'thumbslice'</span> + w + <span style="color: #00b400">'x'</span> + h)</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">    <span style="color: #0433ff">else</span>:</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">        <span style="color: #0433ff">pass</span></div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">    rsp = HttpResponse(jpeg_data, content_type=<span style="color: #00b400">'image/jpeg'</span>)</div><div style="margin: 0px; font-size: 11px; font-family: Monaco;">    <span style="color: #0433ff">return</span> rsp</div></div><div><br></div><div><br></div><div>The parameters in the context (?c=1|-3000,3000) are set using the _get_prepared_image function() (which is a function used in render_image call).</div><div>However the image is not modified.</div><div><br></div><div>Some questions:</div><div><br></div><div>1 - How can I compile the OmeroWeb package and run it. I have tryed compiling components/tools/omeroWEB only, but then the command omero web start does not load the updated version. Also the default option for “components/tools/OmeroWeb/build.xml </div><div><br></div><div>2 - In img.getThumbnail(size=size, z=int(z), t=int(t), direct=direct, rdefId=rdefId) rdefId is not used inside the function, the same for the _r in _prepareTB().</div><div><br></div><div>3- Where are the logs of the "omero web start” command stored? I would like to check if _prepareTB() is reseting the grayscale parameters in the context. Also, how can I manually kill the web server if it hangs?</div><div><br></div><div>4- I am lost when the code reaches OmeroPy/build/lib/omero_api_ThumbnailSotre_ice.py remote procedure calls  (def getThumbnailForSectionDirect(self, theZ, theT, sizeX, sizeY, _ctx=None)). I would like to check also if the context parameters are read by the generate thumbnail function in the server side.</div><div><br></div><div>Thank you in advance,</div><div>José Salavert Torres</div><div>EMBL-EBI, pdbe/emdb/empiar3d</div><div><br></div></body></html>