簡體   English   中英

創建圖片庫

[英]Creating picture gallery

我想為我的網站創建一個圖片庫,並從網站的管理面板上傳這些圖片。 我將在一個非常小的頁面中顯示所有圖片,並且我將為每張圖片分開一個地方以顯示大尺寸的所選圖片(來自小圖片)。

我知道兩種方法:

  1. 我創建了兩張圖片,用於從管理面板上傳,一個大圖片和一個小尺寸的圖片。 所以我將在一個獨立的大空間加載一個大的。 小的地方會顯示小的。 所以該網站的管理員應該創建2個圖片。

  2. 我知道的第二種方法是使用PHP的GD庫只能上傳大圖,並且在每個地方PHP函數將調整大圖並獲得我需要的2個尺寸的圖庫。

第一種方法的缺點是,網站的用戶在上傳之前應該使用Photoshop或其他工具。 讓我們同意這對網站用戶來說不是一件令人愉快的事情。

第二種方法也不好,因為GD通過降低質量來調整圖片大小。 而且這種損失是不可接受的,因為它太多了。

在保持接近原始圖像質量的同時調整操作大小的方法是什么?

或者這兩種方法的另一種方法是什么?

GD不會像Photoshop那樣失去質量。 只要確保你使用的是imagecopyresampled()而不是imagecopyresized() ,因為它不會進行任何類型的重新采樣。 然后以足夠高的質量保存生成的圖像; 對於JPEG,大概是80。

然后在Photoshop中進行類似的調整大小,你會發現沒有太大區別。 你也可以使用GD來銳化你的縮略圖,這會給它們帶來一些額外的清晰度。

編輯

我做了一個工具來比較不同的調整大小方法,試一試,看看自己最好的方法是什么: http//www.ulmanen.fi/stuff/downsample/

使用以下功能:

Image('/path/to/original.image', '1/1', '150*', './thumb.jpg'); // thumb, width = 150 px
Image('/path/to/original.image', null, '600*', './full.jpg'); // full, width = 600 px

如果需要,可以通過第二個參數(w / h)指定裁剪比例,也可以通過第三個參數(w * h)指定已調整大小的圖像的寬度和/或高度。

function Image($source, $crop = null, $scale = null, $destination = null)
{
    $source = @ImageCreateFromString(@file_get_contents($source));

    if (is_resource($source) === true)
    {
        $size = array(ImageSX($source), ImageSY($source));

        if (isset($crop) === true)
        {
            $crop = array_filter(explode('/', $crop), 'is_numeric');

            if (count($crop) == 2)
            {
                $crop = array($size[0] / $size[1], $crop[0] / $crop[1]);

                if ($crop[0] > $crop[1])
                {
                    $size[0] = $size[1] * $crop[1];
                }

                else if ($crop[0] < $crop[1])
                {
                    $size[1] = $size[0] / $crop[1];
                }

                $crop = array(ImageSX($source) - $size[0], ImageSY($source) - $size[1]);
            }

            else
            {
                $crop = array(0, 0);
            }
        }

        else
        {
            $crop = array(0, 0);
        }

        if (isset($scale) === true)
        {
            $scale = array_filter(explode('*', $scale), 'is_numeric');

            if (count($scale) >= 1)
            {
                if (empty($scale[0]) === true)
                {
                    $scale[0] = $scale[1] * $size[0] / $size[1];
                }

                else if (empty($scale[1]) === true)
                {
                    $scale[1] = $scale[0] * $size[1] / $size[0];
                }
            }

            else
            {
                $scale = array($size[0], $size[1]);
            }
        }

        else
        {
            $scale = array($size[0], $size[1]);
        }

        $result = ImageCreateTrueColor($scale[0], $scale[1]);

        if (is_resource($result) === true)
        {
            ImageFill($result, 0, 0, IMG_COLOR_TRANSPARENT);
            ImageSaveAlpha($result, true);
            ImageAlphaBlending($result, true);

            if (ImageCopyResampled($result, $source, 0, 0, $crop[0] / 2, $crop[1] / 2, $scale[0], $scale[1], $size[0], $size[1]) === true)
            {
                ImageConvolution($result, array(array(-1, -1, -1), array(-1, 16, -1), array(-1, -1, -1)), 8, 0);
                ImageJPEG($result, $destination, 90);
            }
        }
    }

    return false;
}

圖像會自動增強(銳化)並以高質量保存為JPEG。

請享用!

您可以使用ImageMagick而不是GD來獲得更好的結果。 我不確定您需要與您的網站進行何種級別的集成,但我建議您在開始編碼之前檢查開源項目。

為什么不使用phpThumb()

  • 您只需要為圖像標記生成src-links。
  • 自動緩存。
  • 提供了許多操作圖像的選項。 請參閱演示頁面。
  • 使用ImageMagick和后備GD ,你不必關心(但你可以)。
  • 幾乎所有東西都可以配置。 請參閱: phpThumb.config.php

輸出圖像時如何使用imagejpeg的質量參數?

我使用這個簡單的shell腳本,需要從ImageMagick 轉換

#!/bin/sh

W=256
T="Some recent photos"

cat <<EOF
<HTML>
<HEAD>
<TITLE>$T</TITLE>
<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=iso-8859-1">
</HEAD>
<BODY STYLE="font-family: sans-serif">
<H1>$T</H1>
Click on the photos to enlarge<P>
EOF

for i
do
convert -resize $W "$i" "T$i"
cat <<EOF
<A HREF="$i"><IMG SRC="T$i" WIDTH=$W></A>
EOF
done

cat <<EOF
</BODY></HTML>
EOF

我會使用一個文件上傳,然后使用ImageMagick在服務器上創建縮略圖( http://www.imagemagick.org/script/index.php

如果您不了解圖像的存儲位置,可以使用Flickr PHP API。 由於flickr提供各種尺寸的圖像,因此您可以為圖庫制作布局。

查看http://phpflickr.com/

我已經將它用於一個項目,並對它有多容易感到驚訝。 您基本上可以通過該API執行每個操作,並且您也可以為多個用戶執行此操作,因此您將節省自己和其他人的大量時間。 更不用提空間了! - )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM