Looks like filtering artifacts to me. When bilinear filtering is used four neighboring texels are sampled to determine fragment color, in a case you?¢_Tre textures one dimension is say 64 pixels and it is scaled so texture coordinate at screen pixel is say 64.5 then texels from both sides of the texture will be sampled and if one has alpha 1 the other 0 then the pixel you might expect to be transparent might turn out to have alpha of 0.5
To combat this use larger texture with additional free space between borders,
or keep pixels on screen proportional to texels, meaning exactly same size or n * original size, so no inbetween values get generated,
or try using clamping texture coordinates:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
this has to be done for every texture.
From the looks of it you use a lot of small textures, for better performance you should asemble smaller tiles into larger textures.