<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi Hannes,<div class=""><br class=""></div><div class="">I have implemented this in various ways in my InternetArchive client library—a work in (slow) progress over the last 3+ years.  Note I did not realize a similar library had been written for Sophie ten years ago.  This one was based on the Python client library which uses the current InternetArchive API.</div><div class=""><br class=""></div><div class="">I finally made it public in its current state here: </div><div class=""><br class=""></div><div class=""><a href="https://github.com/tcj/craggyaloofness" class="">https://github.com/tcj/craggyaloofness</a></div><div class=""><br class=""></div><div class="">Some examples for how to use it live in the IAExample* classes.  </div><div class=""><br class=""></div><div class=""><div class="">The following will display the famous Byte cover and restore the display after a click:</div><div class=""><br class=""></div><div class="">(IAItem named: 'byte-magazine-1981-08' ) displayItemTileJpeg</div></div><div class=""><br class=""></div><div class="">Anyway, you can find my code in the 'displaying graphics' instance method category of IADownload.   Also note that you may be interested in seeing Form class>>#openImageInWindow:</div><div class=""><br class=""></div><div class="">Here is how I implemented some JPEG download & display in Squeak 5.2.  These methods are taken from the IADownload and perhaps IAItem classes.</div><div class=""><br class=""></div><div class=""><div class="">getResponse</div><div class=""><span class="Apple-tab-span" style="white-space:pre"> </span>"returns a WebResponse object"</div><div class=""><span class="Apple-tab-span" style="white-space:pre">  </span>^ response := WebClient httpGet: self url.</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span></div></div><div class=""><br class=""></div><div class=""><div class="">downloadJpegIntoForm</div><div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>| s contents jww imageExtent form | </div><div class=""><span class="Apple-tab-span" style="white-space:pre"> </span>s := ByteArray new writeStream.</div><div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>s binary.</div><div class=""><span class="Apple-tab-span" style="white-space:pre"> </span>self getResponse.</div><div class=""><span class="Apple-tab-span" style="white-space:pre"> </span>response streamTo: s size: response contentLength progress: nil.</div><div class=""><span class="Apple-tab-span" style="white-space:pre">  </span>response close.</div><div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>contents := s contents.</div><div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>(JPEGReadWriter2 understandsImageFormat: (contents readStream))</div><div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>ifFalse: [^ self error: 'cannot read jpeg'].</div><div class=""><span class="Apple-tab-span" style="white-space:pre">      </span>jww := JPEGReadWriter2 new.</div><div class=""><span class="Apple-tab-span" style="white-space:pre">       </span>imageExtent := jww imageExtent: contents.</div><div class=""><span class="Apple-tab-span" style="white-space:pre"> </span>form := Form extent: imageExtent depth: 32.</div><div class=""><span class="Apple-tab-span" style="white-space:pre">       </span>jww uncompress: contents into: form doDithering: false.</div><div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>^ form</div></div><div class=""><br class=""></div><div class=""><div class=""><div class="">displayJpeg</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>| form | </div><div class=""><span class="Apple-tab-span" style="white-space:pre">    </span>form := self downloadJpegIntoForm.</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>Display restoreAfter: [ form displayOn: Display ].</div></div></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div class="">displayJpegInMorph</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>| form morph | </div><div class=""><span class="Apple-tab-span" style="white-space:pre">      </span>form := self downloadJpegIntoForm.</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>morph := BorderedMorph newBounds: (form bounds). </div><div class=""><span class="Apple-tab-span" style="white-space:pre">    </span>Display restoreAfter: [ form displayOn: Display ].</div></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div class="">displayJpegInWindow</div><div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>| form morph window | </div><div class=""><span class="Apple-tab-span" style="white-space:pre">       </span>self flag: #seeFormClassSideForUtilityMethod.</div><div class=""><span class="Apple-tab-span" style="white-space:pre">     </span>form := self downloadJpegIntoForm.</div><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>morph := form asMorph.</div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">     </span>window := SystemWindow labelled: 'image'.</div><div class=""><span class="Apple-tab-span" style="white-space:pre"> </span>window </div><div class="">"<span class="Apple-tab-span" style="white-space:pre">                </span>addMorphCentered: (form asMorph);"</div><div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>addMorph: (form asMorph) frame: (0.0@0.0 corner: 1.0@1.0) .</div><div class="">"<span class="Apple-tab-span" style="white-space:pre">         </span>addMorph: (form asMorph) fullFrame: (SystemWindow menuBoxFrame) ."</div><div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>window </div><div class=""><span class="Apple-tab-span" style="white-space:pre">              </span>openInWorldExtent: (form extent scaleBy: 1.2 @ 1.2).</div></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Let me know if I can help further.  I believe there is also code in there for displaying downloaded GIFs and animated GIFs but I could be wrong.</div><div class=""><br class=""></div><div class="">Best,</div><div class="">Tim</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">On Mar 21, 2019, at 3:51 AM, H. Hirzel <<a href="mailto:hannes.hirzel@gmail.com" class="">hannes.hirzel@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Hello<br class=""><br class="">What is a good modern way in Squeak to load a picture from the web?<br class=""><br class="">I am looking for an equivalent of<br class=""><br class="">| pngPicURL aStream |<br class=""><br class="">pngPicURL := '<a href="https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Squeak-x11.png/617px-Squeak-x11.png'" class="">https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Squeak-x11.png/617px-Squeak-x11.png'</a>.<br class=""><br class="">aStream := HTTPSocket httpGet: pngPicURL.<br class=""><br class="">(ImageReadWriter formFromStream: aStream) asMorph openInHand<br class=""><br class="">And answer or just comments are welcome.<br class=""><br class="">Thank you.<br class=""><br class="">Kind regards<br class=""><br class="">Hannes<br class=""><br class=""><br class=""></div></div></blockquote></div><br class=""></div></body></html>