2

I've got a CSS class defined like so:

.MyClass .MyIcon {
  background: url("../Images/my_icon.png") no-repeat scroll 0px 0px transparent !important;  
}

But the image is a little too big for what I need. Is there a way to shrink this image from its current size of 20 x 20 to 16 x 16, using CSS. So just making another image is not an option.

I've been searching different sites, but I feel like I'm missing something.

Thx for any help! :D

khr055
  • 28,690
  • 16
  • 36
  • 48

5 Answers5

6

You cannot change the size of a background image just yet, only in browsers that support css3 you can use the background-size property.

jeroen
  • 91,079
  • 21
  • 114
  • 132
1

Only in CSS 3. It's called background-size.

Keltex
  • 26,220
  • 11
  • 79
  • 111
0

Here's an article with a good explanation: http://css-tricks.com/how-to-resizeable-background-image/ Although it technically isn't the background image, it eliminates javascript and the need for css3

Zak
  • 2,688
  • 4
  • 29
  • 45
0

This has been asked and answered before.

Set size on background image with CSS?

If you need to make the image bigger, you must edit the image itself in an image editor.

If you use the img tag, you can change the size, but that would not give you the desired result if you need the image to be background for some other content (and it will not repeat itself like you seems to want)...

That being said, you could probably create a PHP Page, or something similar, to serve the image at a resized dimension.

.yourDivClass{
    background:url(/getImage.php?w=16&h=16&image=my_icon.png);
}

getImage.php

<?php
$filename="../images/".$_REQUEST['image'];
smart_resize_imageFile(
    $filename, 
    $_REQUEST['w'], 
    $_REQUEST['h'], 
    true, 
    'browser', 
    false
);


function smart_resize_imageFile( $file, $width = 0, $height = 0, $proportional = false, $output = 'file', $delete_original = true, $use_linux_commands = false){
    if ( $height <= 0 && $width <= 0 ) {
      return false;
    }

    $info = getimagesize($file);
    $image = '';

    $final_width = 0;
    $final_height = 0;
    list($width_old, $height_old) = $info;

    if ($proportional) {
      if ($width == 0) $factor = $height/$height_old;
      elseif ($height == 0) $factor = $width/$width_old;
      else $factor = min ( $width / $width_old, $height / $height_old);   

      $final_width = round ($width_old * $factor);
      $final_height = round ($height_old * $factor);

    }
    else {
      $final_width = ( $width <= 0 ) ? $width_old : $width;
      $final_height = ( $height <= 0 ) ? $height_old : $height;
    }

    switch ( $info[2] ) {
      case IMAGETYPE_GIF:
        $image = imagecreatefromgif($file);
      break;
      case IMAGETYPE_JPEG:
        $image = imagecreatefromjpeg($file);
      break;
      case IMAGETYPE_PNG:
        $image = imagecreatefrompng($file);
      break;
      default:
        return false;
    }

    if ( $info[2] == IMAGETYPE_GIF )
        $image_resized = imagecreate( $final_width, $final_height );
    else
        $image_resized = imagecreatetruecolor( $final_width, $final_height );

    if ( ($info[2] == IMAGETYPE_GIF) || ($info[2] == IMAGETYPE_PNG) ) {
      $trnprt_indx = imagecolortransparent($image);

      // If we have a specific transparent color
      if ($trnprt_indx >= 0) {

        // Get the original image's transparent color's RGB values
        $trnprt_color    = imagecolorsforindex($image, $trnprt_indx);

        // Allocate the same color in the new image resource
        $trnprt_indx    = imagecolorallocate($image_resized, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);

        // Completely fill the background of the new image with allocated color.
        imagefill($image_resized, 0, 0, $trnprt_indx);

        // Set the background color for new image to transparent
        imagecolortransparent($image_resized, $trnprt_indx);


      } 
      // Always make a transparent background color for PNGs that don't have one allocated already
      elseif ($info[2] == IMAGETYPE_PNG) {

        // Turn off transparency blending (temporarily)
        imagealphablending($image_resized, false);

        // Create a new transparent color for image
        $color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127);

        // Completely fill the background of the new image with allocated color.
        imagefill($image_resized, 0, 0, $color);

        // Restore transparency blending
        imagesavealpha($image_resized, true);
      }
    }

    imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $final_width, $final_height, $width_old, $height_old);
    if ( $delete_original ) {
      if ( $use_linux_commands )
        exec('rm '.$file);
      else
        @unlink($file);
    }

    switch ( strtolower($output) ) {
      case 'browser':
        $mime = image_type_to_mime_type($info[2]);
        header("Content-type: $mime");
        $output = NULL;
      break;
      case 'file':
        $output = $file;
      break;
      case 'return':
        return $image_resized;
      break;
      default:
      break;
    }

    switch ( $info[2] ) {
      case IMAGETYPE_GIF:
        imagegif($image_resized, $output);
      break;
      case IMAGETYPE_JPEG:
        imagejpeg($image_resized, $output);
      break;
      case IMAGETYPE_PNG:
        imagepng($image_resized, $output);
      break;
      default:
        return false;
    }

    return true;
}
?>
Community
  • 1
  • 1
Dutchie432
  • 28,798
  • 20
  • 92
  • 109
0

This might not sound like what you were looking for..

But I once ended up using <img /> tags and changed the height and width attributes as desired.

Robin Maben
  • 22,194
  • 16
  • 64
  • 99