Archive for October, 2011
Convert SQL Server to MySQL
Some time ago, I had to convert a Microsoft SQL Server database to a MySQL database. The main reason was the cost of the SQL Server license for such a small database.
Looking on the web, I found the following open source application:
Name: | mssql2mysql |
URL: | http://sourceforge.net/projects/mssql2mysql/ |
Description: | mssql2mysql is a python script used to create a SQL dump from a Microsoft SQL server that is ready to use with MySQL. Supports Schema and data dumping, including Primary Keys for each table, allows to dump all data or just a small portion of it. |
To be honest, this tool wasn’t working as expected but it was a very good start! 🙂
Below is the list of changes I’ve made:
- Add support for the
bool
data type; - Add support for the
datetime
data type; - Only convert tables and views of the ‘dbo’ owner;
- Add the test
columnas[6]==True
on the primary key; - Add support for the
uniqueidentifier
data type; - Add support for the
tinyint
data type (SQL Server istinyint unsigned
by default, but not in MySQL!); - Add support for the default column values;
- Add support for the
bit
data type (usetinyint
instead ofbit
, go to this page for more information).
To download the amended script, please click on the following link: mssql2mysql.tar.bz2
This script worked perfectly fine for me. However, please note that my interest was focused on converting the database structure but not the content!
Make image backgrounds transparent with tolerance
In one of the projects I am working on at the moment, I needed to convert the background colour of an image to be transparent so the image looks better on a non-white background.
Looking on the Web, I found the following article from Dustin Marx:
Making White Image Backgrounds Transparent with Java 2D/Groovy
If the link is broken, please download his code from the following link: ImageTransparency.java
The method which makes the background colour transparent is called makeColorTransparent
. This method works pretty well, except in some cases as shown in the example below:
Original image |
Converted image using Dustin’s method |
This is actually quite normal. Indeed, his code is converting a specific colour (#FFFFFF in our case) to be transparent. But what if the background is not homogeneous?
This is the reason why I had to modify his method to add a new parameter called tolerance
:
private Image makeColorTransparent(final BufferedImage im, final Color color, int tolerance) { int temp = 0; if (tolerance < 0 || tolerance > 100) { System.err.println("The tolerance is a percentage, so the value has to be between 0 and 100."); temp = 0; } else { temp = tolerance * (0xFF000000 | 0xFF000000) / 100; } final int toleranceRGB = Math.abs(temp); final ImageFilter filter = new RGBImageFilter() { // The color we are looking for (white)... Alpha bits are set to opaque public int markerRGBFrom = (color.getRGB() | 0xFF000000) - toleranceRGB; public int markerRGBTo = (color.getRGB() | 0xFF000000) + toleranceRGB; public final int filterRGB(final int x, final int y, final int rgb) { if ((rgb | 0xFF000000) >= markerRGBFrom && (rgb | 0xFF000000) <= markerRGBTo) { // Mark the alpha bits as zero - transparent return 0x00FFFFFF & rgb; } else { // Nothing to do return rgb; } } }; final ImageProducer ip = new FilteredImageSource(im.getSource(), filter); return Toolkit.getDefaultToolkit().createImage(ip); }
Such as Photoshop, the tolerance is a percentage value between 0 and 100. The higher the tolerance is, the bigger the range of colours will be.
Let’s take our previous example and apply a 50% tolerance:
That looks much better, isn’t it? 🙂