Il s'agit d'un effet spécial très intéressant, simulant l'effet granuleux en forme de point qui apparaît lorsqu'une caméra capture un écran de télévision. La taille des particules est réalisée grâce à la matrice de transformation et peut être ajustée arbitrairement. Les amis intéressés par la recherche peuvent essayer plus d'effets. Le code n'a pas été optimisé et n'est qu'une démonstration approximative. Vous pouvez l'améliorer vous-même.
1. Obtenir les données d'image
img.src = 'http://bloglaotou.duapp.com/wp-content/themes/frontopen2/tools/filter/image2.jpg'
canvas.width = img.width ;
canvas.height = img.height;
var context = canvas.getContext("2d");
context.drawImage(img, 0, 0); context.getImageData (0, 0, canvas.width, canvas.height);
2 Définir la matrice de filtre
var m_VideoType=0; >switch (m_VideoType)
{
case0://VIDEO_TYPE.VIDEO_STAGGERED :
{
motif = [
0, 1,
0, 2,
1, 2 ,
1, 0 ,
2, 0,
2, 1,
];
pause; {
modèle = [
0,
1,
2,
];
break;
case2://VIDEO_TYPE.VIDEO_3X3 :
{
modèle =
[
0, 1, 2,
2, 0, 1,
1, 2, 0,
]; }
par défaut :
{
modèle =
[
0, 1, 2, 0, 0,
1, 1, 1, 2, 0,
0, 1, 2, 2, 2 ,
0, 0, 1, 2, 0,
0, 1, 1, 1, 2,
2, 0, 1, 2, 2,
0, 0, 0, 1 , 2,
2, 0, 1, 1, 1,
2, 2, 0, 1, 2,
2, 0, 0, 0, 1,
1, 2, 0, 1, 1,
2, 2, 2, 0, 1,
1, 2, 0, 0, 0,
1, 1, 2, 0, 1 ,
1, 2, 2, 2, 0,
];
break;
}
var pattern_width = [ 2, 1, 3, 5 ]; >var pattern_height = [6, 3, 3, 15 ];
3. Obtenir des données filtrées
Copier le code
Le code est le suivant :
for ( var x = 0; x < canvasData.width; x ) {
for ( var y = 0; y < canvasData. height; y ) { if (index == 1)
var g = fclamp0255(2 * g);
if (index == 2)
var b = fclamp0255( 2 * b);
// attribuer une valeur d'échelle de gris
canvasData.data[idx 0] = r; // Canal rouge
canvasData.data[idx 1] = g; >canvasData.data[idx 2] = b ; // Canal bleu
canvasData.data[idx 3] = 255; // Canal Alpha
// Ajouter une bordure noire
if(x < 8 | | y < 8 || x > (canvasData.width - 8) || (canvasData.height - 8))
{
canvasData.data[idx 0] = 0; canvasData.data[idx 1] = 0;
canvasData.data[idx 2] = 0;
}
}
}
4. données filtrées
Copier le code
Le code est le suivant :
contexte .putImageData(canvasData, 0, 0 );
5. Documents de référence
Projet open source Dai Zhenjun ImageFilter