Go to main content

Textpattern CMS support forum

You are not logged in. Register | Login | Help

#13 2013-11-17 00:39:39

phiw13
Plugin Author
From: Japan
Registered: 2004-02-27
Posts: 3,079
Website

Re: copyprotection of images

gaekwad wrote:

Also, make a div the same size as the image, set the image as the background and stretch a 1px transparent GIF over it if you want to be sneaky.

That is actually not a great idea, if you care about performance. Background images load with a much lower priority, and secondly, more and more, browsers use some preloading techniques & heuristics to attempt to fetch content images faster (matters on mobile devices even more) – that is images referenced in an img element.

The trick illustrated by Pat64 is probably the less annoying one (might still be a little disturbing for those who use assistive technologies, this could be mitigated by using aria-hidden=true for the transparent overlay image).

Hmm come to think of it, Pat64’s technique could be improved by using an empty span, sized to and overlaying the image, with a transparent background (background: rgba(0,0,0,0)). One less network call.


Where is that emoji for a solar powered submarine when you need it ?
Sand space – admin theme for Textpattern

Offline

#14 2013-11-17 08:05:30

Pat64
Plugin Author
From: France
Registered: 2005-12-12
Posts: 1,599
GitHub Twitter

Re: copyprotection of images

Hi Philippe :)

A very interesting point of view. aria-hidden="true" role="presentation" are still used (my primary attempt to leave alt text attributes empty), but changing transparent 1×1px gif by a span is a good, clever solution. I changed the markup of the website I mentioned above. Thanks ;)

Cheers,


Patrick.

Github | CodePen | Codier | Simplr theme | Wait Me: a maintenance theme | [\a mi.ni.ma]: a “Low Tech” simple Blog theme.

Offline

#15 2013-11-18 10:39:18

Gallex
Member
Registered: 2006-10-08
Posts: 1,289

Re: copyprotection of images

i guess, those last solutions won’t protect for steeling if user chooses “save page as…” from browser’s menu?

Offline

#16 2013-11-18 12:03:14

phiw13
Plugin Author
From: Japan
Registered: 2004-02-27
Posts: 3,079
Website

Re: copyprotection of images

Gallex wrote:

i guess, those last solutions won’t protect for steeling if user chooses “save page as…” from browser’s menu?

No, indeed. But all those no-right-click js solutions won’t protect your images either in that case. As has already been noted, if you don’t want someone to ‘steel’ your images, don’t put them on a public server.


Where is that emoji for a solar powered submarine when you need it ?
Sand space – admin theme for Textpattern

Offline

#17 2013-11-18 15:47:17

etc
Developer
Registered: 2010-11-11
Posts: 5,053
Website GitHub

Re: copyprotection of images

Gallex wrote:

i guess, those last solutions won’t protect for steeling if user chooses “save page as…” from browser’s menu?

That’s only an idea, but you can try to:

  • encode your images, using www.freeformatter.com/base64-encoder.html, for example, and store encoded strings on your server;
  • create image tags with empty src attribute;
  • set img {pointer-events: none} rule in your css;
  • on page load, load encoded images with jQuery ajax:
$.ajax({ 
    url : 'BASE64_IMAGE_REST_URL', 
    processData : false,
}).always(function(b64data){
    $("#IMAGE_ID").attr("src", "data:image/png;base64,"+b64data);
});

Due to ajax same-origin policy, a user shouldn’t be able to load image strings from a local copy.

Edit: alternatively, you can load just image sources from your server.

Last edited by etc (2013-11-18 15:53:23)

Offline

#18 2013-11-18 16:41:25

gaekwad
Server grease monkey
From: People's Republic of Cornwall
Registered: 2005-11-19
Posts: 4,137
GitHub

Re: copyprotection of images

phiw13 wrote:

That is actually not a great idea, if you care about performance. Background images load with a much lower priority, and secondly, more and more, browsers use some preloading techniques & heuristics to attempt to fetch content images faster (matters on mobile devices even more) – that is images referenced in an img element.

I respectfully stand corrected. Thanks for the info, Philippe.

Offline

#19 2013-11-18 22:12:00

JimJoe
Member
From: United States
Registered: 2010-01-30
Posts: 573
Website

Re: copyprotection of images

Post lower quality copies ? Use Irfanview to lower the color depth ?

Offline

#20 2013-11-19 07:58:57

Gallex
Member
Registered: 2006-10-08
Posts: 1,289

Re: copyprotection of images

thank’s guys for a lot of ideas. went for this ‘disable right click’ easy solution

<script type="text/javascript">
$('body').on('contextmenu', 'img', function(e){ return false; });
</script>

…which saticfied my client

Offline

#21 2013-11-19 10:04:42

Gocom
Developer Emeritus
From: Helsinki, Finland
Registered: 2006-07-14
Posts: 4,533
Website

Re: copyprotection of images

etc wrote:

That’s only an idea, but you can try to:

That doesn’t do anything since browsers save the current document state as stored in the memory. The saved page will include the images as they were loaded. It doesn’t matter when a node is added to the document.

Offline

#22 2013-11-19 11:53:14

etc
Developer
Registered: 2010-11-11
Posts: 5,053
Website GitHub

Re: copyprotection of images

Gocom wrote:

That doesn’t do anything since browsers save the current document state as stored in the memory. The saved page will include the images as they were loaded. It doesn’t matter when a node is added to the document.

Yes and no, try to catch the cat.

Offline

#23 2013-11-19 14:04:59

colak
Admin
From: Cyprus
Registered: 2004-11-20
Posts: 9,011
Website GitHub Mastodon Twitter

Re: copyprotection of images

etc wrote:

Yes and no, try to catch the cat.

It can be done in firefox when pressing Command+i, going to media (the location and type state that it is a png image) and save the image as cat.png. Admittedly not many people would look there though:) I think that it is a cool method and it will deter the average surfer from downloading it.


Yiannis
——————————
NeMe | hblack.art | EMAP | A Sea change | Toolkit of Care
I do my best editing after I click on the submit button.

Offline

#24 2013-11-19 14:20:51

Gocom
Developer Emeritus
From: Helsinki, Finland
Registered: 2006-07-14
Posts: 4,533
Website

Re: copyprotection of images

etc wrote:

Yes and no, try to catch the cat.

Downloaded page contains what is in the memory, so, when downloaded, you get image you loaded with Ajax rather than the placeholder you used. The page source contains:

<img id="test" src="data:image/png;base64,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">

Which is the cat. Chrome, Firefox etc. just dump what is in memory to your drive. Adding something on later event to the document body doesn’t change that. This is one of the reasons why you shouldn’t mix attributes, internal mappins and properties in JavaScript; you get document presentation that doesn’t match what you have in memory when pulling document from memory.

You are better off just using that above base64 encoded image in the document. Saves you HTTP requests too. If you want to do that attribute replacement thing you are doing (that use document state-faults), you can do it without Ajax request. Just assign an attribute to the document, like so:

$('img.fetched').remove();
$('img').addClass('fetched');

Which causes the document in memory contain that particular class, which makes the above statement remove the images with the class.

Last edited by Gocom (2013-11-19 14:26:54)

Offline

Board footer

Powered by FluxBB