Malayalam language support (I hope)
This commit is contained in:
parent
8169aec68c
commit
665cbfb2cf
7 changed files with 1322 additions and 275 deletions
|
|
@ -1,272 +0,0 @@
|
||||||
Tux Paint
|
|
||||||
version 0.9.22
|
|
||||||
Advanced Stamps HOWTO
|
|
||||||
|
|
||||||
Copyright 2006-2008 by Albert Cahalan for the Tux Paint project
|
|
||||||
New Breed Software
|
|
||||||
|
|
||||||
albert@users.sf.net
|
|
||||||
http://www.tuxpaint.org/
|
|
||||||
|
|
||||||
March 8, 2006 - July 1, 2009
|
|
||||||
|
|
||||||
About this HOWTO
|
|
||||||
|
|
||||||
This HOWTO assumes that you want to make an excellent Tux Paint stamp,
|
|
||||||
in PNG bitmapped format, from a JPEG image (e.g., a digital photograph).
|
|
||||||
There are easier and faster methods that produce lower quality.
|
|
||||||
|
|
||||||
This HOWTO assumes you are dealing with normal opaque objects. Dealing
|
|
||||||
with semi-transparent objects (fire, moving fan blade, kid's baloon) or
|
|
||||||
light-giving objects (fire, lightbulb, sun) is best done with custom
|
|
||||||
software. Images with perfect solid-color backgrounds are also best done
|
|
||||||
with custom software, but are not troublesome to do as follows.
|
|
||||||
|
|
||||||
Image choice is crucial
|
|
||||||
|
|
||||||
License
|
|
||||||
|
|
||||||
If you wish to submit artwork to the Tux Paint developers for
|
|
||||||
consideration for inclusion in the official project, or if you wish to
|
|
||||||
release your own copy of Tux Paint, bundled with your own graphics,
|
|
||||||
you need an image that is compatible with the GNU General Public
|
|
||||||
License used by Tux Paint.
|
|
||||||
|
|
||||||
Images produced by the US government are Public Domain, but be aware
|
|
||||||
that the US government sometimes uses other images on the web. Google
|
|
||||||
image queries including either site:gov or site:mil will supply many
|
|
||||||
suitable images. (Note: the *.mil sites include non-military content,
|
|
||||||
too!)
|
|
||||||
|
|
||||||
Your own images can be placed in the Public Domain by declaring it so.
|
|
||||||
(Hire a lawyer if you feel the need for legal advice.)
|
|
||||||
|
|
||||||
For personal use, any image you can legitimately modify and use for
|
|
||||||
your own personal use should be fine.
|
|
||||||
|
|
||||||
Image Size and Orientation:
|
|
||||||
|
|
||||||
You need an image that has a useful orientation. Perspective is an
|
|
||||||
enemy. Images that show an object from the corner are difficult to fit
|
|
||||||
into a nice drawing. As a general rule, telephoto side views are the
|
|
||||||
best. The impossible ideal is that, for example, two wheels of a car
|
|
||||||
are perfectly hidden behind the other two.
|
|
||||||
|
|
||||||
Rotating an image can make it blurry, especially if you only rotate by
|
|
||||||
a few degrees. Images that don't need rotation are best, images that
|
|
||||||
need lots of rotation (30 to 60 degrees) are next best, and images
|
|
||||||
that need just a few degrees are worst. Rotation will also make an
|
|
||||||
image darker because most image editing software is very bad about
|
|
||||||
gamma handling. (Rotation is only legitimate for gamma=1.0 images.)
|
|
||||||
|
|
||||||
Very large images are more forgiving of mistakes, and thus easier to
|
|
||||||
work with. Choose an image with an object that is over 1000 pixels
|
|
||||||
across if you can. You can shrink this later to hide your mistakes.
|
|
||||||
|
|
||||||
Be sure that the image is not too grainy, dim, or washed out.
|
|
||||||
|
|
||||||
Pay attention to feet and wheels. If they are buried in something, you
|
|
||||||
will need to draw new ones. If only one is buried, you might be able
|
|
||||||
to copy the other one as a replacement.
|
|
||||||
|
|
||||||
Prepare the image:
|
|
||||||
|
|
||||||
First of all, be sure to avoid re-saving the image as a JPEG. This
|
|
||||||
causes quality loss. There is a special tool called jpegtran that lets
|
|
||||||
you crop an image without the normal quality loss. If you want a GUI for
|
|
||||||
it, use ljcrop. Otherwise, use it like this:
|
|
||||||
|
|
||||||
jpegtran -trim -copy none -crop 512x1728+160+128 < src.jpg >
|
|
||||||
cropped.jpg
|
|
||||||
|
|
||||||
Bring that image up in your image editor. If you didn't crop it yet, you
|
|
||||||
may find that your image editor is very slow. Rotate and crop the image
|
|
||||||
as needed. Save the image - choose whatever native format supports
|
|
||||||
layers, masks, alpha, etc. GIMP users should choose "XCF", and Adobe
|
|
||||||
Photoshop users should choose "PSD", for example.
|
|
||||||
|
|
||||||
If you have rotated or cropped the image in your image editor, flatten
|
|
||||||
it now. You need to have just one RGB layer without mask or alpha.
|
|
||||||
|
|
||||||
Open the layers dialog box. Replicate the one layer several times. From
|
|
||||||
top to bottom you will need something like this:
|
|
||||||
|
|
||||||
1. unmodified image (write-protect this if you can)
|
|
||||||
2. an image you will modify - the "WIP" layer
|
|
||||||
3. solid green (write-protect this if you can)
|
|
||||||
4. solid magenta (write-protect this if you can)
|
|
||||||
5. unmodified image (write-protect this if you can)
|
|
||||||
|
|
||||||
Give the WIP layer a rough initial mask. You might start with a
|
|
||||||
selection, or by using the grayscale value of the WIP layer. You might
|
|
||||||
invert the mask.
|
|
||||||
|
|
||||||
Warning: once you have the mask, you may not rotate or scale the image
|
|
||||||
normally. This would cause data loss. You will be given special scaling
|
|
||||||
instructions later.
|
|
||||||
|
|
||||||
Prepare the mask:
|
|
||||||
|
|
||||||
Get used to doing Ctrl-click and Alt-click on the thumbnail images in
|
|
||||||
the layers dialog. You will need this to control what you are looking at
|
|
||||||
and what you are editing. Sometimes you will be editing things you can't
|
|
||||||
see. For example, you might edit the mask of the WIP layer while looking
|
|
||||||
at the unmodified image. Pay attention so you don't screw up. Always
|
|
||||||
verify that you are editing the right thing.
|
|
||||||
|
|
||||||
Set an unmodified image as what you will view (the top one is easiest).
|
|
||||||
Set the WIP mask as what you will edit. At some point, perhaps not
|
|
||||||
immediately, you should magnify the image to about 400% (each pixel of
|
|
||||||
the image is seen and edited as a 4x4 block of pixels on your screen).
|
|
||||||
|
|
||||||
Select parts of the image that need to be 100% opaque or 0% opaque. If
|
|
||||||
you can select the object or background somewhat accurately by color, do
|
|
||||||
so. As needed to avoid selecting any pixels that should be partially
|
|
||||||
opaque (generally at the edge of the object) you should grow, shrink,
|
|
||||||
and invert the selection.
|
|
||||||
|
|
||||||
Fill the 100% opaque areas with white, and the 0% opaque areas with
|
|
||||||
black. This is most easily done by drag-and-drop from the
|
|
||||||
foreground/background color indicator. You should not see anything
|
|
||||||
happen, because you are viewing the unmodified image layer while editing
|
|
||||||
the mask of the WIP layer. Large changes might be noticable in the
|
|
||||||
thumbnail.
|
|
||||||
|
|
||||||
Now you must be zoomed in.
|
|
||||||
|
|
||||||
Check your work. Hide the top unmodified image layer. Display just the
|
|
||||||
mask, which should be a white object on a black background (probably
|
|
||||||
with unedited grey at the edge). Now display the WIP layer normally, so
|
|
||||||
that the mask is active. This should show your object over top of the
|
|
||||||
next highest enabled layer, which should be green or magenta as needed
|
|
||||||
for maximum contrast. You might wish to flip back and forth between
|
|
||||||
those backgrounds by repeatedly clicking to enable/disable the green
|
|
||||||
layer. Fix any obvious and easy problems by editing the mask while
|
|
||||||
viewing the mask.
|
|
||||||
|
|
||||||
Go back to viewing the top unmodified layer while editing the WIP mask.
|
|
||||||
Set your drawing tool the paintbrush. For the brush, choose a small
|
|
||||||
fuzzy circle. The 5x5 size is good for most uses.
|
|
||||||
|
|
||||||
With a steady hand, trace around the image. Use black around the
|
|
||||||
outside, and white around the inside. Avoid making more than one pass
|
|
||||||
without switching colors (and thus sides).
|
|
||||||
|
|
||||||
Flip views a bit, checking to see that the mask is working well. When
|
|
||||||
the WIP layer is composited over the green or magenta, you should see a
|
|
||||||
tiny bit of the original background as an ugly fringe around the edge.
|
|
||||||
If this fringe is missing, then you made the object mask too small. The
|
|
||||||
fringe consists of pixels that are neither 100% object nor 0% object.
|
|
||||||
For them, the mask should be neither 100% nor 0%. The fringe gets
|
|
||||||
removed soon.
|
|
||||||
|
|
||||||
View and edit the mask. Select by color, choosing either black or white.
|
|
||||||
Most likely you will see unselected specks that are not quite the
|
|
||||||
expected color. Invert the selection, then paint these away using the
|
|
||||||
pencil tool. Do this operation for both white and black.
|
|
||||||
|
|
||||||
Replace the fringe and junk pixels:
|
|
||||||
|
|
||||||
Still viewing the mask, select by color. Choose black. Shrink the
|
|
||||||
selection by several pixels, being sure to NOT shrink from the edges of
|
|
||||||
the mask (the shrink helps you avoid and recover from mistakes).
|
|
||||||
|
|
||||||
Now disable the mask. View and edit the unmasked WIP layer. Using the
|
|
||||||
color picker tool, choose a color that is average for the object.
|
|
||||||
Drag-and-drop this color into the selection, thus removing most of the
|
|
||||||
non-object pixels.
|
|
||||||
|
|
||||||
This solid color will compress well and will help prevent ugly color
|
|
||||||
fringes when Tux Paint scales the image down. If the edge of the object
|
|
||||||
has multiple colors that are very different, you should split up your
|
|
||||||
selection so that you can color the nearby background to be similar.
|
|
||||||
|
|
||||||
Now you will paint away the existing edge fringe. Be sure that you are
|
|
||||||
editing and viewing the WIP image. Frequent layer visibility changes
|
|
||||||
will help you to see what you are doing. You are likely to use all of:
|
|
||||||
|
|
||||||
* composited over green (mask enabled)
|
|
||||||
* composited over magenta (mask enabled)
|
|
||||||
* original (the top or bottom layer)
|
|
||||||
* composited over the original (mask enabled)
|
|
||||||
* raw WIP layer (mask DISABLED)
|
|
||||||
|
|
||||||
To reduce accidents, you may wish to select only those pixels that are
|
|
||||||
not grey in the mask. (Select by color from the mask, choose black, add
|
|
||||||
mode, choose white, invert. Alternately: Select all, select by color
|
|
||||||
from the mask, subtract mode, choose black, choose white.) If you do
|
|
||||||
this, you'll probably want to expand the selection a bit and/or hide the
|
|
||||||
"crawling ants" line that marks the selection.
|
|
||||||
|
|
||||||
Use the clone tool and the brush tool. Vary the opacity as needed. Use
|
|
||||||
small round brushes mostly, perhaps 3x3 or 5x5, fuzzy or not. (It is
|
|
||||||
generally nice to pair up fuzzy brushes with 100% opacity and non-fuzzy
|
|
||||||
brushes with about 70% opacity.) Unusual drawing modes can be helpful
|
|
||||||
with semi-transparent objects.
|
|
||||||
|
|
||||||
The goal is to remove the edge fringe, both inside and outside of the
|
|
||||||
object. The inside fringe, visible when the object is composited over
|
|
||||||
magenta or green, must be removed for obvious reasons. The outside
|
|
||||||
fringe must also be removed because it will become visible when the
|
|
||||||
image is scaled down. As an example, consider a 2x2 region of pixels at
|
|
||||||
the edge of a sharp-edged object. The left half is black and 0% opaque.
|
|
||||||
The right half is white and 100% opaque. That is, we have a white object
|
|
||||||
on a black background. When Tux Paint scales this to 50% (a 1x1 pixel
|
|
||||||
area), the result will be a grey 50% opaque pixel. The correct result
|
|
||||||
would be a white 50% opaque pixel. To get this result, we would paint
|
|
||||||
away the black pixels. They matter, despite being 0% opaque.
|
|
||||||
|
|
||||||
Tux Paint can scale images down by a very large factor, so it is
|
|
||||||
important to extend the edge of your object outward by a great deal.
|
|
||||||
Right at the edge of your object, you should be very accurate about
|
|
||||||
this. As you go outward away from the object, you can get a bit sloppy.
|
|
||||||
It is reasonable to paint outward by a dozen pixels or more. The farther
|
|
||||||
you go, the more Tux Paint can scale down without creating ugly color
|
|
||||||
fringes. For areas that are more than a few pixels away from the object
|
|
||||||
edge, you should use the pencil tool (or sloppy select with
|
|
||||||
drag-and-drop color) to ensure that the result will compress well.
|
|
||||||
|
|
||||||
Save the image for Tux Paint
|
|
||||||
|
|
||||||
It is very easy to ruin your hard work. Image editors can silently
|
|
||||||
destroy pixels in 0% opaque areas. The conditions under which this
|
|
||||||
happens may vary from version to version. If you are very trusting, you
|
|
||||||
can try saving your image directly as a PNG. Be sure to read it back in
|
|
||||||
again to verify that the 0% opaque areas didn't turn black or white,
|
|
||||||
which would create fringes when Tux Paint scales the image down. If you
|
|
||||||
need to scale your image to save space (and hide your mistakes), you are
|
|
||||||
almost certain to destroy all the 0% opaque areas. So here is a better
|
|
||||||
way...
|
|
||||||
|
|
||||||
A Safer Way to Save:
|
|
||||||
|
|
||||||
Drag the mask from the layers dialog to the unused portion of the
|
|
||||||
toolbar (right after the last drawing tool). This will create a new
|
|
||||||
image consisting of one layer that contains the mask data. Scale this
|
|
||||||
as desired, remembering the settings you use. Often you should start
|
|
||||||
with an image that is about 700 to 1500 pixels across, and end up with
|
|
||||||
one that is 300 to 400.
|
|
||||||
|
|
||||||
Save the mask image as a NetPBM portable greymap (".pgm") file. (If
|
|
||||||
you are using an old release of The GIMP, you might need to convert
|
|
||||||
the image to greyscale before you can save it.) Choose the more
|
|
||||||
compact "RAW PGM" format. (The second character of the file should be
|
|
||||||
the ASCII digit "5", hex byte 0x35.)
|
|
||||||
|
|
||||||
You may close the mask image.
|
|
||||||
|
|
||||||
Going back to the multi-layer image, now select the WIP layer. As you
|
|
||||||
did with the mask, drag this from the layers dialog to the toolbar.
|
|
||||||
You should get a single-layer image of your WIP data. If the mask came
|
|
||||||
along too, get rid of it. You should be seeing the object and the
|
|
||||||
painted-away surroundings, without any mask thumbnail in the layers
|
|
||||||
dialog. If you scaled the mask, then scale this image in exactly the
|
|
||||||
same way. Save this image as a NetPBM portable pixmap (".ppm") file.
|
|
||||||
(Note: ppm, not pgm.) (If you choose the RAW PPM format, the second
|
|
||||||
byte of the file should be the ASCII digit "6", hex byte 0x36.)
|
|
||||||
|
|
||||||
Now you need to merge the two files into one. Do that with the
|
|
||||||
pnmtopng command, like this:
|
|
||||||
|
|
||||||
pnmtopng -force -compression 9 -alpha mask.pgm fg.ppm >
|
|
||||||
final-stamp.png
|
|
||||||
|
|
@ -621,6 +621,8 @@ Windows Users
|
||||||
|--------------------+---------------------+---------------|
|
|--------------------+---------------------+---------------|
|
||||||
|malay | | |
|
|malay | | |
|
||||||
|--------------------+---------------------+---------------|
|
|--------------------+---------------------+---------------|
|
||||||
|
|malayalam | | |
|
||||||
|
|--------------------+---------------------+---------------|
|
||||||
|mexican-spanish |espanol-mejicano |mexican |
|
|mexican-spanish |espanol-mejicano |mexican |
|
||||||
|--------------------+---------------------+---------------|
|
|--------------------+---------------------+---------------|
|
||||||
|ndebele | | |
|
|ndebele | | |
|
||||||
|
|
|
||||||
|
|
@ -890,6 +890,11 @@ New Breed Software</p>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>malayalam</code></td>
|
||||||
|
<td> </td>
|
||||||
|
<td> </td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><code>mexican-spanish</code></td>
|
<td><code>mexican-spanish</code></td>
|
||||||
<td><code>espanol-mejicano</code></td>
|
<td><code>espanol-mejicano</code></td>
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
June 14, 2002 - February 16, 2010
|
June 14, 2002 - March 23, 2010
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// FIXME: gettext() won't even bother to look up messages unless it
|
// FIXME: gettext() won't even bother to look up messages unless it
|
||||||
|
|
@ -119,6 +119,7 @@ const char *lang_prefixes[NUM_LANGS] = {
|
||||||
"lb",
|
"lb",
|
||||||
"lt",
|
"lt",
|
||||||
"lv",
|
"lv",
|
||||||
|
"ml",
|
||||||
"mk",
|
"mk",
|
||||||
"ms",
|
"ms",
|
||||||
"nb",
|
"nb",
|
||||||
|
|
@ -168,6 +169,7 @@ static int lang_use_own_font[] = {
|
||||||
LANG_JA,
|
LANG_JA,
|
||||||
LANG_KA,
|
LANG_KA,
|
||||||
LANG_KO,
|
LANG_KO,
|
||||||
|
LANG_ML,
|
||||||
LANG_TA,
|
LANG_TA,
|
||||||
LANG_TE,
|
LANG_TE,
|
||||||
LANG_TH,
|
LANG_TH,
|
||||||
|
|
@ -332,7 +334,8 @@ static const language_to_locale_struct language_to_locale_array[] = {
|
||||||
{"traditional-chinese", "zh_TW.UTF-8"},
|
{"traditional-chinese", "zh_TW.UTF-8"},
|
||||||
{"zapotec", "zam.UTF-8"},
|
{"zapotec", "zam.UTF-8"},
|
||||||
{"miahuatlan-zapotec", "zam.UTF-8"},
|
{"miahuatlan-zapotec", "zam.UTF-8"},
|
||||||
{"khmer", "km_KH.UTF-8"}
|
{"khmer", "km_KH.UTF-8"},
|
||||||
|
{"malayalam", "ml_IN.UTF-8"}
|
||||||
};
|
};
|
||||||
|
|
||||||
/* FIXME: All this should REALLY be array-based!!! */
|
/* FIXME: All this should REALLY be array-based!!! */
|
||||||
|
|
@ -395,6 +398,7 @@ static void show_lang_usage(int exitcode)
|
||||||
/* lb */ " luxembourgish letzebuergesch\n"
|
/* lb */ " luxembourgish letzebuergesch\n"
|
||||||
/* mk */ " macedonian\n"
|
/* mk */ " macedonian\n"
|
||||||
/* ms */ " malay\n"
|
/* ms */ " malay\n"
|
||||||
|
/* ml */ " malayalam\n"
|
||||||
/* es_MX */
|
/* es_MX */
|
||||||
" mexican mexican-spanish espanol-mejicano\n"
|
" mexican mexican-spanish espanol-mejicano\n"
|
||||||
/* nr */ " ndebele\n"
|
/* nr */ " ndebele\n"
|
||||||
|
|
@ -492,6 +496,7 @@ static void show_locale_usage(FILE * f, const char *const prg)
|
||||||
" ko_KR (Korean)\n"
|
" ko_KR (Korean)\n"
|
||||||
" ku_TR (Kurdish)\n"
|
" ku_TR (Kurdish)\n"
|
||||||
" ms_MY (Malay)\n"
|
" ms_MY (Malay)\n"
|
||||||
|
" ml_IN (Malayalam)\n"
|
||||||
" lb_LU (Luxembourgish Letzebuergesch)\n"
|
" lb_LU (Luxembourgish Letzebuergesch)\n"
|
||||||
" lv_LV (Latvian)\n"
|
" lv_LV (Latvian)\n"
|
||||||
" lt_LT (Lithuanian Lietuviu)\n"
|
" lt_LT (Lithuanian Lietuviu)\n"
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
June 14, 2002 - February 16, 2010
|
June 14, 2002 - March 23, 2010
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -89,6 +89,7 @@ enum
|
||||||
LANG_LT, /* Lithuanian */
|
LANG_LT, /* Lithuanian */
|
||||||
LANG_LV, /* Latvian */
|
LANG_LV, /* Latvian */
|
||||||
LANG_MK, /* Macedonian */
|
LANG_MK, /* Macedonian */
|
||||||
|
LANG_ML, /* Malayalam */
|
||||||
LANG_MS, /* Malay */
|
LANG_MS, /* Malay */
|
||||||
LANG_NB, /* Norwegian Bokmal */
|
LANG_NB, /* Norwegian Bokmal */
|
||||||
LANG_NL, /* Dutch */
|
LANG_NL, /* Dutch */
|
||||||
|
|
|
||||||
|
|
@ -615,6 +615,9 @@ macedonian
|
||||||
malay
|
malay
|
||||||
.TP 2
|
.TP 2
|
||||||
-
|
-
|
||||||
|
malayalam
|
||||||
|
.TP 2
|
||||||
|
-
|
||||||
mexican-spanish | espanol-mejicano | mexican
|
mexican-spanish | espanol-mejicano | mexican
|
||||||
.TP 2
|
.TP 2
|
||||||
-
|
-
|
||||||
|
|
|
||||||
1303
src/po/ml.po
Normal file
1303
src/po/ml.po
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue