Gnus development mailing list
 help / color / mirror / Atom feed
From: Julien Danjou <julien@danjou.info>
To: ding@gnus.org
Subject: Re: [gnus git]  branch master updated: =1= shr.el (shr-tag-div): Added.
Date: Fri, 19 Nov 2010 17:13:52 +0100	[thread overview]
Message-ID: <87lj4pmgu7.fsf@keller.adm.naquadah.org> (raw)
In-Reply-To: <m3lj52w1vs.fsf@quimbies.gnus.org> (Lars Magne Ingebrigtsen's message of "Tue, 09 Nov 2010 23:47:19 +0100")

On Tue, Nov 09 2010, Lars Magne Ingebrigtsen wrote:

> So I wonder whether it's easy to write a function (or whether someone
> already has written) that would take two colours -- in this instance,
> "blue" (say #0000ff) and black, and transform the blue into a colour
> "light enough" to be read on a black background.  (And the opposite with
> a white background, of course.)

Well, I spent all my spare time since one week working on that, and I
can say: that's not easy.

Color is a very interesting subject, with a lot of research going on,
and this one did not seems to have really researched yet. :-)

Here's my journey.

First, I've done experimentation based on luminance, but it's not enough
obviously. You have also to consider color distance, because colors can
have almost the same luminance but can be very different in chroma.

Then, I've then done experimentation based on color distance in a HSV or
HSL representation (yay 3D math), but that was no good enough too.

After digging on the Internet, I found and implemented the CIEDE2000[1]
formula, having some good results.

With CIEDE2000 and luminance from the CIE L*a*b* representation of
colors, I know have something which can barely says if 2 colors are
almost the same to the human eyes. But unfortunately, the various Delta
E formula does not really care about spatial disposition of images (or
text), which does not mean this as a very reliable criteria. Because
blue and yellow are very distinctive colors, but I can't read small text
in yellow on a blue background.

There's things like S-CIELAB which take spatial into accounts, but I
don't think that's realisable for know in our case.

So basically, so far, my code can eliminate a lot of colors that are
really close and filter out very bad things like light grey on white,
but it can't assure that you will be able to read the text correctly.

I'll clean the code now and publish it online ASAP, since I think the
CIEDE2000 implementation in elisp can *maybe* interest some people
someday. So you'll be able to give it a try and look how it works.

(If anybody knows a color expert, please, forward this mail to him/her.
:-)

[1]  http://en.wikipedia.org/wiki/Color_difference#CIEDE2000

-- 
Julien Danjou
// ᐰ <julien@danjou.info>   http://julien.danjou.info



  parent reply	other threads:[~2010-11-19 16:13 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <E1PArgx-0006dS-00@quimby.gnus.org>
2010-10-26 23:58 ` Lars Magne Ingebrigtsen
2010-10-27  0:15   ` Katsumi Yamaoka
2010-10-27  0:22     ` Katsumi Yamaoka
2010-10-27  0:28     ` Lars Magne Ingebrigtsen
2010-10-27  0:43       ` Katsumi Yamaoka
2010-10-27 18:06   ` Ted Zlatanov
2010-10-29 23:18     ` Lars Magne Ingebrigtsen
2010-11-09 22:25       ` Ted Zlatanov
2010-11-09 22:47         ` Lars Magne Ingebrigtsen
2010-11-09 23:02           ` Steinar Bang
2010-11-10  9:54           ` Julien Danjou
2010-11-10 17:49             ` Colourspace (was: [gnus git] branch master updated: =1= shr.el (shr-tag-div): Added.) Lars Magne Ingebrigtsen
2010-11-10 19:09               ` Colourspace Julien Danjou
2010-11-10 19:44                 ` Colourspace Ted Zlatanov
2010-11-10 19:56                   ` Colourspace Julien Danjou
2010-11-10 20:22                     ` ELPA and Gnus (was: Colourspace) Ted Zlatanov
2010-11-10 20:48                       ` ELPA and Gnus Lars Magne Ingebrigtsen
2010-11-10 21:23                         ` Ted Zlatanov
2010-11-10 21:32                           ` Lars Magne Ingebrigtsen
2010-11-11 13:19                             ` Ted Zlatanov
2010-11-14 16:07                               ` Lars Magne Ingebrigtsen
2010-11-15 15:43                               ` Julien Danjou
2010-11-11  9:06                         ` Julien Danjou
2010-11-14 16:07                           ` Lars Magne Ingebrigtsen
2010-11-10 20:48                 ` Colourspace Lars Magne Ingebrigtsen
2010-11-10 20:55                   ` Colourspace Lars Magne Ingebrigtsen
2010-11-11  8:59                     ` Colourspace Julien Danjou
2010-11-18 18:49               ` Colourspace Ted Zlatanov
2010-11-10 13:14           ` [gnus git] branch master updated: =1= shr.el (shr-tag-div): Added Ted Zlatanov
2010-11-19 16:13           ` Julien Danjou [this message]
2010-11-21  4:40             ` Lars Magne Ingebrigtsen
2010-11-21 13:55               ` Julien Danjou
2010-11-21 18:38                 ` Colour manipulation (was: [gnus git] branch master updated: =1= shr.el (shr-tag-div): Added.) Lars Magne Ingebrigtsen
2010-11-21 18:55                   ` Colour manipulation Julien Danjou
2010-11-21 19:02                     ` Lars Magne Ingebrigtsen
2010-11-21 19:26                       ` Julien Danjou
2010-11-21 19:42                         ` Lars Magne Ingebrigtsen
2010-11-22 14:49                         ` Julien Danjou
2010-11-24  2:27                           ` Katsumi Yamaoka
2010-11-24  5:45                             ` Katsumi Yamaoka
2010-11-24  6:39                               ` Lars Magne Ingebrigtsen
2010-11-24  8:43                                 ` Julien Danjou
2010-11-24 20:37                                   ` Lars Magne Ingebrigtsen
2010-11-24 20:48                                     ` Lars Magne Ingebrigtsen
2010-11-24 21:18                                     ` Julien Danjou
2010-11-24 21:27                                       ` Lars Magne Ingebrigtsen
2010-11-24  8:52                               ` Julien Danjou
2010-11-24  6:39                             ` Lars Magne Ingebrigtsen
2010-11-24  8:37                             ` Julien Danjou
2010-11-22 15:37                         ` Julien Danjou
2010-11-22 15:59                           ` Lars Magne Ingebrigtsen
2010-11-23  1:38                             ` Lars Magne Ingebrigtsen
2010-11-23  9:15                               ` Julien Danjou
2010-11-23 23:50                                 ` Lars Magne Ingebrigtsen
2010-11-23  9:48                               ` Julien Danjou
2010-11-23 23:52                                 ` Lars Magne Ingebrigtsen
2010-11-21 19:57                     ` Frank Schmitt
2010-11-22 19:47                     ` Ted Zlatanov
2010-11-23  9:10                       ` Julien Danjou
2010-11-23 14:52                         ` Ted Zlatanov
2010-11-23 15:54                           ` Julien Danjou
2010-11-23 16:15                             ` Ted Zlatanov
2010-11-23 18:32                               ` Colour blindness correction (was: Colour manipulation) Julien Danjou
2010-11-23 23:50                             ` Colour manipulation Lars Magne Ingebrigtsen
2010-11-24  8:32                               ` Julien Danjou
2010-11-26 20:17                             ` Adam Sjøgren
2010-11-24  1:09                         ` Greg Troxel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87lj4pmgu7.fsf@keller.adm.naquadah.org \
    --to=julien@danjou.info \
    --cc=ding@gnus.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).