搜尋此網誌

2007年1月28日 星期日

用GIMP為照片加上投影片框


1. 開啟要處理的圖檔,如果是多圖層,記得先將影像平面化


2. 『Script-Fu』->『裝飾』->『投影片』,開啟的對話框用內定值就可以,產生新檔案後將前兩個圖層合併

2007年1月27日 星期六

使用GIMP輕鬆製作火焰效果

1. 新噌一空白圖檔

2. 使用漸層工具(黑至白)在此圖層填上漸層,白色為火焰的亮度


3. 新增一透明圖層,圖層模式設為『Grain merge』

2007年1月3日 星期三

用GIMP製作閃字、語卡

寫了兩個script,製作閃字跟鑽字(已含在 Gimp 2.4 Script ),有興趣的人可以將它下載解壓縮到 \Documents and Settings\"使用者的名稱"\.gimp-2.2\scripts 或是 \Program Files\GIMP-2.0\share\gimp\2.0\scripts 資料夾底下(所有下載的script,都是放在這兩資料夾其中一個),使用它很解單,按『擴展』->『Script-Fu』->『Logos』->『閃字』開啟以下對話框,填入資料後按確定就搞定了



成品




作小字記得先將柔邊關掉,要不然字會糊掉

作鑽字,按『擴展』->『Script-Fu』->『標誌』- >鑽字開啟類似閃字的對話框,一樣填入資料即可



或許有人會問,用Script做出來的閃字,沒地方加裝飾效果怎麼辦?
這時可以按『影像』->『畫布尺寸』擴大畫布的尺寸,並調好位置
接著點選每個圖層,『圖層』->『另圖層符合影像尺寸』將每個圖層的尺寸改跟畫布一樣,這樣就有空間來加些裝飾了

語卡製作
一樣用Script做出閃字或開啟現有的gif檔
由於gif檔是256色的格式,所以使用gif檔需先將其模式轉為全彩(『影像』->『模式』->『RGB』)
再將背景檔案拉進來當圖層或是『檔案』->『Open as Layers...』將檔案開啟為圖層,讓這個圖層為作用圖層,『影像』->『畫布縮放至符合圖層尺寸』將影像大小改為跟背景圖一樣後,再將這個圖層複製,調整圖層順序如下


想要移動文字,可以按上圖游標所指,將兩個閃字圖層連結,再用移動圖層的工具讓兩文字圖層一起移動,位置確定後,再用圖層向下合併將兩文字圖層跟下面的背景圖層合併就完成了



這種圖,最後最好用『濾鏡』->『動畫』->『動畫優化』,這樣做出來的GIF檔會比較小


回答以下T Bear的回應(不是用一層文字一層底圖的方式)
就是直接做出優化後的方式,做法是比較簡單,只要將底圖移到最下面,如下圖


之後再將底圖與它上面的文字層合併即可,只是如果你不明瞭動畫顯示時,影格模式的運作方式,那麼在圖層對話框這邊,看起來就會比較怪

2007年1月1日 星期一

自由影像處理軟體GIMP 相關下載

Gimp 的全名是GNU Image Manipulation Program,由名字中的G字母就可以知道它是以GNU公有版權來發行與維護,因此你可以自由地取得它、使用它、甚至散佈它

Gimp在設計之初就以Adobe的Photoshop為模仿的對象,因此它有跟Photoshop幾乎一樣的功能,影像處理功能可以說是相當完整,對一般人而言絕對夠用,如果你沒有正版的 Photoshop 或 PhotoImpact,別再費心去找盜版了,用GIMP真的就夠了。

使用XnView批次處理圖檔

XnView 個人使用免費的秀圖管理程式,名氣雖然沒ACDSee響,但就功能而言,絕對符合一般個人使用

在瀏覽模式先將要處理的圖片全部選取,再按右鍵選取『批次轉換』開啟『批次轉換』的對話框(也可在檢視模式中,按選單的『工具』->『批次轉換』開啟這個對話框,再按『新增』加入要處理的檔案)

一些自由或免費的軟體

以下軟體的功能對一般家庭及個人而言絕對夠用,最重要的是它們完全免費合法
商業軟體雖然貴,但沒人規定一定要使用這些商業軟體
所以當有免費合法的軟體可用,實在無法再說沒有使用正版軟體的本錢

C的簡單發牌程式

#include <stdio.h>
#include <stdlib.h>

int        Rand(int min, int max)
{
    int        rnd;
    int        range = abs(max - min);

    rnd = (rand() % range) + min;
    return(rnd);
}

void    InitCard(char *card, int num)
{
    int        i;
    
    for( i = 0; i < num; i ++ ) {
        card[i] = i % 52;
    }
}

void    ShuffleCard(char *card, int num)
{
    int        i, rnd;
    char    tmp;
    
    for( i = 0; i < num; i ++ ) {
        rnd = Rand(0, num);
        tmp = card[i];
        card[i] = card[rnd];
        card[rnd] = tmp;
    }
}

void    ShowCard(char *card, int num)
{
    int        i, rank, suit;
    char    *szSuit[] = { "黑桃", "紅桃", "方塊", "梅花" };
    
    for( i = 0; i < num; i ++ ) {
        rank = card[i] % 13;
        suit = card[i] / 13;
        printf("%s%2d, ", szSuit[suit], rank+1);
    }
    printf("\n");
}

int        main(void)
{
    int        TotalCards = 52*4;   // 使用4副牌
    int        Players = 4;                  //  4個玩家
    int        Cards = 5;                     // 每人5張牌
    char    card[TotalCards];
    int        i, j, ci;
    char    player[Players][Cards];
    
    InitCard(card, TotalCards);    // 初始牌值
    
    ShuffleCard(card, TotalCards);    // 洗牌

    // 發牌, ci 紀錄目前發到第幾張牌
    ci = 0;
    for( j = 0; j < Cards; j ++ ) {
        for( i = 0; i < Players; i ++ ) {
            player[i][j] = card[ci++];
        }
    }
    // 顯示各家手上的牌
    for( i = 0; i < Players; i ++ ) {
        ShowCard(player[i], Cards);
    }
    system("PAUSE");
    return 0;
}