When calling theme_image(), the only way to properly display images that are absolute urls, is to set getsize = false. This should happen automatically for external urls. Patch attached will check for an absolute url and go ahead with image theming if it is absolute.

Support from Acquia helps fund testing for Drupal Acquia logo

Comments

jscheel’s picture

Status: Active » Needs review
moshe weitzman’s picture

Status: Needs review » Needs work

strpos() would be a bit faster and more readable, no? otherwise, nice work.

jscheel’s picture

Status: Needs work » Needs review
FileSize
1.05 KB

Good point moshe. This patch uses stripos(), and only checks for http at position 0. I axed the ftp protocol because I'm pretty sure you can't even use ftp as an image source. stripos() brings about a 26% speed increase over preg_match(). If we would rather go with strpos(), it would be closer to a 50% increase, but we lose the robustness of case-insensitive matching.

moshe weitzman’s picture

i have never ever see http capitalized. i don't think we need to support that.

jscheel’s picture

I'm fine with strpos(), especially since it cuts the execution time almost by half, and I have attached a patch doing so.

Just for discussion though: this quote is from Internet Standard STD66, section 3.1, regarding URI schemes:

Although schemes are case-insensitive, the canonical form is lowercase and documents that specify schemes must do so with lowercase letters. An implementation should accept uppercase letters as equivalent to lowercase in scheme names (e.g., allow "HTTP" as well as "http") for the sake of robustness but should only produce lowercase scheme names for consistency.

moshe weitzman’s picture

Status: Needs review » Reviewed & tested by the community

thats better. thx.

jscheel’s picture

Do I need to do anything else at this point, or is this just waiting on Dries's review for committing?

Dries’s picture

Status: Reviewed & tested by the community » Needs work

No test case?

jscheel’s picture

FileSize
2.39 KB
1.35 KB

Argh, called me out on it, Dries! Ok... ok.... attached is a new patch that also includes some fixes for spaces in-between attributes in the generated html. I have also attached a test for the absolute image issue, as well as my new spacing fixes. This is the first test I have ever written, so I may be dead wrong in my approach :P

Just for performance sake, I tested this new patch by executing theme_image() 100 times. The average total increase after 5 rounds was approx. 2.09 milliseconds, which means each call to theme_image() was increased by 0.0209 milliseconds, which I believe is negligible. Is this ok?

jscheel’s picture

Status: Needs work » Needs review
jscheel’s picture

Status: Needs review » Needs work

Hmm, now that I think about it, this shouldn't check for "http" because that's too ambiguous. What if there is an internal link like "httpstuffiscool"?

alexanderpas’s picture

how about simply checking for http:// or https:// on the first positions to determine for internal links?

jscheel’s picture

Here's a new patch. I don't really like having two potential strpos checks, so if you can think of a better way, I am definitely all ears.

jscheel’s picture

Status: Needs work » Needs review
webchick’s picture

I'd like to get this in. Just spent a half hour trying to get theme_image() to work with private files. :P

Could we re-use menu_path_is_external()?

webchick’s picture

How about something like this instead?

webchick’s picture

Category: feature » bug
Priority: Minor » Normal

This is at least a normal priority, and I'm going to change it to a bug report instead. theme_image() and file_create_url() should work nicely with one another.

webchick’s picture

webchick’s picture

Status: Needs review » Closed (won't fix)

Yeah. Marking this one a "won't fix" in favour of the other.

Solving the problem this way incurs a minute performance penalty on every call to theme('image'), even if people aren't using private files. The other patch has the same effect but only with those files you're specifically calling file_create_url() on.

ebermelho’s picture

Title: theme_image() should check for absolute urls » theme_image() not evaluating properly?
Version: 7.x-dev » 6.2
Category: bug » support
Status: Closed (won't fix) » Active

ok, please ignore.

Status: Active » Closed (outdated)

Automatically closed because Drupal 6 is no longer supported. If the issue verifiably applies to later versions, please reopen with details and update the version.