[squeak-dev] Modern way to load a picture from the web?

Tim Johnson digit at sonic.net
Tue Apr 2 15:20:21 UTC 2019


Self-reply:

I just noticed the #displayJpegInMorph method below is garbage and can be ignored.

Also, I believe there is a higher-level abstraction above JPEGReadWriter2.  If I recall correctly, this higher level abstraction is connected to the Services architecture and can display many different formats of image files from disk.  I didn't dig into it much and could be mistaken, but with further research it could prove useful.

Thanks again,
Tim J



> On Apr 2, 2019, at 8:15 AM, Tim Johnson <digit at sonic.net> wrote:
> 
> Hi Hannes,
> 
> 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.
> 
> I finally made it public in its current state here: 
> 
> https://github.com/tcj/craggyaloofness <https://github.com/tcj/craggyaloofness>
> 
> Some examples for how to use it live in the IAExample* classes.  
> 
> The following will display the famous Byte cover and restore the display after a click:
> 
> (IAItem named: 'byte-magazine-1981-08' ) displayItemTileJpeg
> 
> 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:
> 
> Here is how I implemented some JPEG download & display in Squeak 5.2.  These methods are taken from the IADownload and perhaps IAItem classes.
> 
> getResponse
> 	"returns a WebResponse object"
> 	^ response := WebClient httpGet: self url.
> 	
> 
> downloadJpegIntoForm
> 	| s contents jww imageExtent form | 
> 	s := ByteArray new writeStream.
> 	s binary.
> 	self getResponse.
> 	response streamTo: s size: response contentLength progress: nil.
> 	response close.
> 	contents := s contents.
> 	(JPEGReadWriter2 understandsImageFormat: (contents readStream))
> 		ifFalse: [^ self error: 'cannot read jpeg'].
> 	jww := JPEGReadWriter2 new.
> 	imageExtent := jww imageExtent: contents.
> 	form := Form extent: imageExtent depth: 32.
> 	jww uncompress: contents into: form doDithering: false.
> 	^ form
> 
> displayJpeg
> 	| form | 
> 	form := self downloadJpegIntoForm.
> 	Display restoreAfter: [ form displayOn: Display ].
> 
> 
> displayJpegInMorph
> 	| form morph | 
> 	form := self downloadJpegIntoForm.
> 	morph := BorderedMorph newBounds: (form bounds). 
> 	Display restoreAfter: [ form displayOn: Display ].
> 
> 
> displayJpegInWindow
> 	| form morph window | 
> 	self flag: #seeFormClassSideForUtilityMethod.
> 	form := self downloadJpegIntoForm.
> 	morph := form asMorph.
> 
> 	window := SystemWindow labelled: 'image'.
> 	window 
> "		addMorphCentered: (form asMorph);"
> 		addMorph: (form asMorph) frame: (0.0 at 0.0 corner: 1.0 at 1.0) .
> "		addMorph: (form asMorph) fullFrame: (SystemWindow menuBoxFrame) ."
> 	window 
> 		openInWorldExtent: (form extent scaleBy: 1.2 @ 1.2).
> 
> 
> 
> 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.
> 
> Best,
> Tim
> 
> 
> 
> 
> 
> 
>> On Mar 21, 2019, at 3:51 AM, H. Hirzel <hannes.hirzel at gmail.com <mailto:hannes.hirzel at gmail.com>> wrote:
>> 
>> Hello
>> 
>> What is a good modern way in Squeak to load a picture from the web?
>> 
>> I am looking for an equivalent of
>> 
>> | pngPicURL aStream |
>> 
>> pngPicURL := 'https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Squeak-x11.png/617px-Squeak-x11.png' <https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Squeak-x11.png/617px-Squeak-x11.png'>.
>> 
>> aStream := HTTPSocket httpGet: pngPicURL.
>> 
>> (ImageReadWriter formFromStream: aStream) asMorph openInHand
>> 
>> And answer or just comments are welcome.
>> 
>> Thank you.
>> 
>> Kind regards
>> 
>> Hannes
>> 
>> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20190402/c46a84c6/attachment.html>


More information about the Squeak-dev mailing list