Dans l'application, il y a environ 1 milliard d'images PNG (taille 1024 * 1024 et environ 1 Mo chacune), il a besoin de combiner les 1 milliards d'images à une immense image, puis produit une taille 1024 * 1024
3 Réponses :
ImageMagick peut faire cela: P>
Si vous ne voulez pas utiliser un assistant externe pour une raison quelconque, vous pouvez toujours utiliser les sources. P> montage -tile * .png tiled.png code> p>
Il est très lent pour une grande quantité d'images dans mes tests, toute suggestion?
Donc, sur un groupe de machines, l'utilisation de montage (avec -Resize) permettrait de regrouper des images. Donc, pour atteindre vos objectifs, vous créeriez d'abord un ensemble d'emplois NXN et d'exécuter ceux-ci, puis sur les montages générés, répétez jusqu'à ce que vous soyez laissé avec un seul montage.
L'idée de charger un milliard d'images en un seul Donc, si chaque image sera représentée par un pixel dans votre image finale, vous devez obtenir la moyenne de chaque image que vous pouvez faire comme ceci: p> montage code> est ridicule. Votre question n'est pas claire, mais votre approche devrait être de déterminer le nombre de pixels que chaque image d'origine s'achèvera dans votre image finale, puis extraire le nombre nécessaire de pixels de chaque image en parallèle. Puis assemblez ces pixels dans une image finale.
find . -name \*.png -print0 | parallel -0 convert {} -format "%[fx:mean.r],%[fx:mean.g],%[fx:mean.b]:%f\n" info:
Si les images de tuiles seront téléchargées de différents clients, c'est une bonne idée de produire le pixel représenté sur le client avant de télécharger, puis composez les pixels à l'image sur le serveur? Est-ce que cette façon sera très rapide?
La réponse dépend de votre environnement qui, malheureusement, je ne peux pas comprendre avec la description actuelle. S'il y a 1 000 000 000 clients vous envoyant une image, il serait logique que chacun vous envoie le minimum nécessaire. S'il n'y a que 1024 clients fournissant chacun 1 000 000 images, il serait logique que chaque client puisse effectuer un bloc complet pour vous, mais vous ne pouvez pas le faire si chaque client n'envoie qu'une seule photo. En général, plus vous pouvez utiliser des machines sur les différentes parties, mieux c'est.
Puis-je vous suggérer respectueusement de modifier votre question et de l'améliorer afin que les gens ne soient pas à deviner et à perdre leur temps à couvrir les cas qui ne sont peut-être pas pertinents ou ne pas être des réponses basées sur de fausses hypothèses découlant d'une mauvaise description ...
Oui, merci, je vais améliorer la description aussi clair que possible.
algorithme randomisé tel que l'échantillonnage aléatoire peut être réalisable. P>
Considérant que l'image combinée est si importante, tout algorithme linéaire peut échouer, sans parler de la méthode de complexité plus élevée. P>
Par calculs, nous pouvons inférer chaque pixel de vignette dépend de 1000 image. Donc, un seul résidu d'échantillonnage n'affecte pas beaucoup le résultat. P>
La description d'algorithme peut être suivie: p>
Pour chaque coordonnée de pixels de vignette, choisissez N Images aléatoires qui sur l'emplacement correspondant et chaque image échantillonnant des pixels, puis calculez la valeur moyenne. Faites la même chose pour d'autres pixels miniatures. P>
Toutefois, si vos images sont combinées de manière aléatoire, le résultat est généralement une image en niveaux de gris valorisée de 0,5. Parce que par le théorème de la limite centrale, la variance du pixel d'image miniature a tendance à être zéro. Donc, vous vous assurez que la vignette combinée est structurée elle-même. P>
PS: Utiliser OpenCV serait un bon choix p>
US milliards (
10 ** 9 code>) ou un milliard de l'UE (
10 ** 12 code>)?
Un moyen d'un milliard de, une quantité énorme.
Qu'entendez-vous par thumbnail unitaire i> et dans quel but?
Comme l'image que j'ai attachée dans le poteau, les images PNG doivent être tranchées à une image immense, puis je veux la vignette de l'immense image.
C'est évident, mais vous n'avez pas défini ce que vous entendez par la vignette; Il y a une différence entre 16x16 Image vs 99999999x999999999 Image. Vous n'avez pas non plus défini ce que vous entendez par rapides (millisecondes vs secondes vs minutes vs heures). Les limites de votre question ne sont pas claires et peuvent avoir un impact énorme sur la façon de faire des choses.
@ user694733, merci de vous rappeler, j'ai ajouté les informations manquantes, la vignette doit être la taille 1024 * 1024 et le temps de processus doit être inférieur à quelques minutes.
Notez que la taille de votre vignette, 1024 * 1024, est à peu près un million i> pixels. Utilisation d'images milliards i> pour le produire, signifie que chaque image d'origine contribuera à environ 1 / 1000e pixel dans la vignette ... La vignette est peu susceptible de visualiser toute information significative. Êtes-vous sûr que c'est ce que vous voulez?
@haraldk, votre opinion est rationnelle, si je veux une miniature taille 1024000 * 1024000, toute bonne idée de le produire?